<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>
<html dir="ltr" xmlns="http://www.w3.org/1999/xhtml" typeof="bibo:Document">
<head>
<title>JSON-LD Syntax 1.0</title>
<meta content="text/html; charset=UTF-8" http-equiv="content-type" />

<!--
  === NOTA BENE ===
  For the three scripts below, if your spec resides on dev.w3 you can check them
  out in the same tree and use relative links so that they'll work offline,
  -->



<style type="text/css">
.diff { font-weight:bold; color:#0a3; }
.issue.resolved { display: none; }
</style>
<style>/*****************************************************************
 * ReSpec 3 CSS
 * Robin Berjon - http://berjon.com/
 *****************************************************************/

/* --- INLINES --- */
em.rfc2119 {
    text-transform:     lowercase;
    font-variant:       small-caps;
    font-style:         normal;
    color:              #900;
}

h1 acronym, h2 acronym, h3 acronym, h4 acronym, h5 acronym, h6 acronym, a acronym,
h1 abbr, h2 abbr, h3 abbr, h4 abbr, h5 abbr, h6 abbr, a abbr {
    border: none;
}

dfn {
    font-weight:    bold;
}

a.internalDFN {
    color:  inherit;
    border-bottom:  1px solid #99c;
    text-decoration:    none;
}

a.externalDFN {
    color:  inherit;
    border-bottom:  1px dotted #ccc;
    text-decoration:    none;
}

a.bibref {
    text-decoration:    none;
}

cite .bibref {
    font-style: normal;
}

code {
    color:  #ff4500;
}


/* --- --- */
ol.algorithm { counter-reset:numsection; list-style-type: none; }
ol.algorithm li { margin: 0.5em 0; }
ol.algorithm li:before { font-weight: bold; counter-increment: numsection; content: counters(numsection, ".") ") "; }

/* --- TOC --- */
.toc a, .tof a {
    text-decoration:    none;
}

a .secno, a .figno {
    color:  #000;
}

ul.tof, ol.tof {
    list-style: none outside none;
}

.caption {
    margin-top: 0.5em;
    font-style:   italic;
}

/* --- TABLE --- */
table.simple {
    border-spacing: 0;
    border-collapse:    collapse;
    border-bottom:  3px solid #005a9c;
}

.simple th {
    background: #005a9c;
    color:  #fff;
    padding:    3px 5px;
    text-align: left;
}

.simple th[scope="row"] {
    background: inherit;
    color:  inherit;
    border-top: 1px solid #ddd;
}

.simple td {
    padding:    3px 10px;
    border-top: 1px solid #ddd;
}

.simple tr:nth-child(even) {
    background: #f0f6ff;
}

/* --- DL --- */
.section dd > p:first-child {
    margin-top: 0;
}

.section dd > p:last-child {
    margin-bottom: 0;
}

.section dd {
    margin-bottom:  1em;
}

.section dl.attrs dd, .section dl.eldef dd {
    margin-bottom:  0;
}
</style><style>/* --- EXAMPLES --- */
div.example-title {
    min-width: 7.5em;
    color: #b9ab2d;
}
div.example-title span {
    text-transform: uppercase;
}
aside.example, div.example, div.illegal-example {
    padding: 0.5em;
    margin: 1em 0;
    position: relative;
    clear: both;
}
div.illegal-example { color: red }
div.illegal-example p { color: black }
aside.example, div.example {
    padding: .5em;
    border-left-width: .5em;
    border-left-style: solid;
    border-color: #e0cb52;
    background: #fcfaee;
}

aside.example div.example {
    border-left-width: .1em;
    border-color: #999;
    background: #fff;
}
aside.example div.example div.example-title {
    color: #999;
}
</style><style>/* --- ISSUES/NOTES --- */
div.issue-title, div.note-title {
    padding-right:  1em;
    min-width: 7.5em;
    color: #b9ab2d;
}
div.issue-title { color: #e05252; }
div.note-title { color: #52e052; }
div.issue-title span, div.note-title span {
    text-transform: uppercase;
}
div.note, div.issue {
    margin-top: 1em;
    margin-bottom: 1em;
}
.note > p:first-child, .issue > p:first-child { margin-top: 0 }
.issue, .note {
    padding: .5em;
    border-left-width: .5em;
    border-left-style: solid;
}
div.issue, div.note {
    padding: 0.5em;
    margin: 1em 0;
    position: relative;
    clear: both;
}
span.note, span.issue { padding: .1em .5em .15em; }

.issue {
    border-color: #e05252;
    background: #fbe9e9;
}
.note {
    border-color: #52e052;
    background: #e9fbe9;
}


</style><link rel="stylesheet" href="http://www.w3.org/StyleSheets/TR/W3C-ED" />
<!--[if lt IE 9]><script src='undefined://www.w3.org/2008/site/js/html5shiv.js'></script><![endif]-->
</head>

<body><div class="head">
  <p>

      <a href="http://www.w3.org/"><img width="72" height="48" alt="W3C" src="http://www.w3.org/Icons/w3c_home" /></a>

  </p>
  <h1 id="title" class="title">JSON-LD Syntax 1.0</h1>

    <h2 id="subtitle">A Context-based JSON Serialization for Linking Data</h2>

  <h2 id="w3c-editor-s-draft-30-august-2012"><abbr title="World Wide Web Consortium">W3C</abbr> Editor's Draft 30 August 2012</h2>
  <dl>

      <dt>This version:</dt>
      <dd><a href="http://dvcs.w3.org/hg/json-ld/raw-file/default/spec/ED/json-ld-syntax/20120830/index.html">http://dvcs.w3.org/hg/json-ld/raw-file/default/spec/ED/json-ld-syntax/20120830/index.html</a></dd>
      <dt>Latest published version:</dt>
      <dd><a href="http://www.w3.org/TR/json-ld-syntax/">http://www.w3.org/TR/json-ld-syntax/</a></dd>


      <dt>Latest editor's draft:</dt>
      <dd><a href="http://dvcs.w3.org/hg/json-ld/raw-file/default/spec/latest/json-ld-syntax/index.html">http://dvcs.w3.org/hg/json-ld/raw-file/default/spec/latest/json-ld-syntax/index.html</a></dd>








    <dt>Editors:</dt>
    <dd inlist="" rel="bibo:editor"><span typeof="foaf:Person"><a href="http://manu.sporny.org/" content="Manu Sporny" property="foaf:name" rel="foaf:homepage">Manu Sporny</a>, <a href="http://digitalbazaar.com/" rel="foaf:workplaceHomepage">Digital Bazaar</a></span>
</dd>
<dd inlist="" rel="bibo:editor"><span typeof="foaf:Person"><a href="http://greggkellogg.net/" content="Gregg Kellogg" property="foaf:name" rel="foaf:homepage">Gregg Kellogg</a>, <a href="http://kellogg-assoc.com/" rel="foaf:workplaceHomepage">Kellogg Associates</a></span>
</dd>
<dd inlist="" rel="bibo:editor"><span typeof="foaf:Person"><a href="http://www.markus-lanthaler.com/" content="Markus Lanthaler" property="foaf:name" rel="foaf:homepage">Markus Lanthaler</a>, <a href="http://www.tugraz.at/" rel="foaf:workplaceHomepage">Graz University of Technology</a></span>
</dd>


      <dt>Authors:</dt>
      <dd rel="dcterms:contributor"><span typeof="foaf:Person"><a href="http://digitalbazaar.com/" content="Manu Sporny" property="foaf:name" rel="foaf:homepage">Manu Sporny</a>, <a href="http://digitalbazaar.com/" rel="foaf:workplaceHomepage">Digital Bazaar</a></span>
</dd>
<dd rel="dcterms:contributor"><span typeof="foaf:Person"><a href="http://digitalbazaar.com/" content="Dave Longley" property="foaf:name" rel="foaf:homepage">Dave Longley</a>, <a href="http://digitalbazaar.com/" rel="foaf:workplaceHomepage">Digital Bazaar</a></span>
</dd>
<dd rel="dcterms:contributor"><span typeof="foaf:Person"><a href="http://greggkellogg.net/" content="Gregg Kellogg" property="foaf:name" rel="foaf:homepage">Gregg Kellogg</a>, <a href="http://kellogg-assoc.com/" rel="foaf:workplaceHomepage">Kellogg Associates</a></span>
</dd>
<dd rel="dcterms:contributor"><span typeof="foaf:Person"><a href="http://www.markus-lanthaler.com/" content="Markus Lanthaler" property="foaf:name" rel="foaf:homepage">Markus Lanthaler</a>, <a href="http://www.tugraz.at/" rel="foaf:workplaceHomepage">Graz University of Technology</a></span>
</dd>
<dd rel="dcterms:contributor"><span typeof="foaf:Person"><a href="http://webbackplane.com/" content="Mark Birbeck" property="foaf:name" rel="foaf:homepage">Mark Birbeck</a>, <a href="http://webbackplane.com/" rel="foaf:workplaceHomepage">Backplane Ltd.</a></span>
</dd>


  </dl>


    <p>

        This document is also available in this non-normative format:

      <a href="diff-20120712.html">diff to previous version</a>
    </p>




      <p class="copyright">
        <a href="http://www.w3.org/Consortium/Legal/ipr-notice#Copyright">Copyright</a> ©
        2010-2012

        <a href="http://www.w3.org/"><abbr title="World Wide Web Consortium">W3C</abbr></a><sup>®</sup>
        (<a href="http://www.csail.mit.edu/"><abbr title="Massachusetts Institute of Technology">MIT</abbr></a>,
        <a href="http://www.ercim.eu/"><abbr title="European Research Consortium for Informatics and Mathematics">ERCIM</abbr></a>,
        <a href="http://www.keio.ac.jp/">Keio</a>), All Rights Reserved.
        <abbr title="World Wide Web Consortium">W3C</abbr> <a href="http://www.w3.org/Consortium/Legal/ipr-notice#Legal_Disclaimer">liability</a>,
        <a href="http://www.w3.org/Consortium/Legal/ipr-notice#W3C_Trademarks">trademark</a> and
        <a href="http://www.w3.org/Consortium/Legal/copyright-documents">document use</a> rules apply.
      </p>


  <hr />
</div>
<section id="abstract" class="introductory"><h2>Abstract</h2>
<p>
JSON has proven to be a highly useful object serialization and messaging format.
In an attempt to harmonize the representation of <a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">Linked Data</a>
in JSON, this specification outlines a common JSON representation format for
expressing directed graphs; mixing both Linked Data and non-Linked Data in
a single document.
</p>
</section><section class="introductory" id="sotd"><h2>Status of This Document</h2>



        <p>
          <em>This section describes the status of this document at the time of its publication. Other
          documents may supersede this document. A list of current <abbr title="World Wide Web Consortium">W3C</abbr> publications and the latest revision
          of this technical report can be found in the <a href="http://www.w3.org/TR/"><abbr title="World Wide Web Consortium">W3C</abbr> technical reports
          index</a> at http://www.w3.org/TR/.</em>
        </p>

<p>This document has been under development for over 18 months in the
JSON for Linking Data Community Group. The document has recently been
transferred to the RDF Working Group for review, improvement, and publication
along the Recommendation track. The specification has undergone significant
development, review, and changes during the course of the last 18 months.
</p>
<p>
There are currently
<a href="http://json-ld.org/#impl">five interoperable implementations</a>
of this specification. There is
a <a href="https://github.com/json-ld/json-ld.org/tree/main/test-suite">fairly complete test suite</a>
and a
<a href="http://json-ld.org/playground/">live JSON-LD editor</a>
that is capable of demonstrating the features described in
this document. While development on implementations, the test suite
and the live editor will continue, they are believed to be mature enough
to be integrated into a non-production system at this point in time with
the expectation that they could be used in a production system within the
next year.
</p>

<p>There are a number of ways that one may participate in the development of
this specification:</p>

<ul>
  <li>If you want to make sure that your feedback is formally addressed by
    the RDF Working Group, you should send it to public-rdf-comments:
    <a href="http://lists.w3.org/Archives/Public/public-rdf-comments/">public-rdf-comments@w3.org</a></li>

  <li>Ad-hoc technical discussion primarily occurs on the public community mailing list:
    <a href="http://lists.w3.org/Archives/Public/public-linked-json/">public-linked-json@w3.org</a></li>

  <li><a href="http://json-ld.org/minutes/">Public JSON-LD Community Group teleconferences</a>
  are held on Tuesdays at 1500UTC every week.</li>

  <li>RDF Working Group teleconferences are held on Wednesdays at 1500UTC
  every week. Participation is limited to RDF Working Group members.</li>

  <li>Specification bugs and issues should be reported in the
    <a href="https://github.com/json-ld/json-ld.org/issues">issue tracker</a>
    if you do not want to send an e-mail to the public-rdf-comments mailing
    list.</li>

  <li><a href="https://github.com/json-ld/json-ld.org/tree/main/spec">Source code</a>
    for the specification can be found on Github.</li>

  <li>The <a href="http://webchat.freenode.net/?channels=json-ld">#json-ld</a>
    IRC channel is available for real-time discussion on irc.freenode.net.</li>
</ul>


        <p>
          This document was published by the <a href="http://www.w3.org/2011/rdf-wg/">RDF Working Group</a> as an Editor's Draft.

          If you wish to make comments regarding this document, please send them to
          <a href="mailto:public-rdf-comments@w3.org">public-rdf-comments@w3.org</a>
          (<a href="mailto:public-rdf-comments-request@w3.org?subject=subscribe">subscribe</a>,
          <a href="http://lists.w3.org/Archives/Public/public-rdf-comments/">archives</a>).


          All feedback is welcome.
        </p>

          <p>
            Publication as an Editor's Draft does not imply endorsement by the <abbr title="World Wide Web Consortium">W3C</abbr> Membership.
            This is a draft document and may be updated, replaced or obsoleted by other documents at
            any time. It is inappropriate to cite this document as other than work in progress.
          </p>


        <p>

            This document was produced by a group operating under the
            <a href="http://www.w3.org/Consortium/Patent-Policy-20040205/">5 February 2004 <abbr title="World Wide Web Consortium">W3C</abbr> Patent Policy</a>.




              <abbr title="World Wide Web Consortium">W3C</abbr> maintains a <a rel="disclosure" href="http://www.w3.org/2004/01/pp-impl/46168/status">public list of any patent disclosures</a>

            made in connection with the deliverables of the group; that page also includes instructions for
            disclosing a patent. An individual who has actual knowledge of a patent which the individual believes contains
            <a href="http://www.w3.org/Consortium/Patent-Policy-20040205/#def-essential">Essential Claim(s)</a> must disclose the
            information in accordance with <a href="http://www.w3.org/Consortium/Patent-Policy-20040205/#sec-Disclosure">section
            6 of the <abbr title="World Wide Web Consortium">W3C</abbr> Patent Policy</a>.


        </p>




</section><section id="toc"><h2 class="introductory">Table of Contents</h2><ul class="toc"><li class="tocline"><a href="#introduction" class="tocxref"><span class="secno">1. </span>Introduction</a><ul class="toc"><li class="tocline"><a href="#how-to-read-this-document" class="tocxref"><span class="secno">1.1 </span>How to Read this Document</a></li><li class="tocline"><a href="#general-terminology" class="tocxref"><span class="secno">1.2 </span>General Terminology</a></li></ul></li><li class="tocline"><a href="#design-goals-and-rationale" class="tocxref"><span class="secno">2. </span>Design Goals and Rationale</a></li><li class="tocline"><a href="#basic-concepts" class="tocxref"><span class="secno">3. </span>Basic Concepts</a><ul class="toc"><li class="tocline"><a href="#linked-data" class="tocxref"><span class="secno">3.1 </span>Linked Data</a></li><li class="tocline"><a href="#syntax-tokens-and-keywords" class="tocxref"><span class="secno">3.2 </span>Syntax Tokens and Keywords</a></li><li class="tocline"><a href="#the-context" class="tocxref"><span class="secno">3.3 </span>The Context</a></li><li class="tocline"><a href="#from-json-to-json-ld" class="tocxref"><span class="secno">3.4 </span>From JSON to JSON-LD</a></li><li class="tocline"><a href="#iris" class="tocxref"><span class="secno">3.5 </span>IRIs</a></li><li class="tocline"><a href="#node-identifiers" class="tocxref"><span class="secno">3.6 </span>Node Identifiers</a></li><li class="tocline"><a href="#specifying-the-type" class="tocxref"><span class="secno">3.7 </span>Specifying the Type</a></li><li class="tocline"><a href="#string-internationalization" class="tocxref"><span class="secno">3.8 </span>String Internationalization</a></li><li class="tocline"><a href="#json-ld-syntax" class="tocxref"><span class="secno">3.9 </span>JSON-LD Syntax</a></li></ul></li><li class="tocline"><a href="#advanced-concepts" class="tocxref"><span class="secno">4. </span>Advanced Concepts</a><ul class="toc"><li class="tocline"><a href="#compact-iris" class="tocxref"><span class="secno">4.1 </span>Compact IRIs</a></li><li class="tocline"><a href="#typed-values" class="tocxref"><span class="secno">4.2 </span>Typed Values</a></li><li class="tocline"><a href="#language-tagged-strings" class="tocxref"><span class="secno">4.3 </span>Language-tagged Strings</a></li><li class="tocline"><a href="#referencing-contexts-from-json-documents" class="tocxref"><span class="secno">4.4 </span>Referencing Contexts from JSON Documents</a></li><li class="tocline"><a href="#expanded-term-definition" class="tocxref"><span class="secno">4.5 </span>Expanded Term Definition</a></li><li class="tocline"><a href="#type-coercion" class="tocxref"><span class="secno">4.6 </span>Type Coercion</a></li><li class="tocline"><a href="#property-generators" class="tocxref"><span class="secno">4.7 </span>Property Generators</a></li><li class="tocline"><a href="#iri-expansion-within-a-context" class="tocxref"><span class="secno">4.8 </span><abbr title="Internationalized Resource Identifier">IRI</abbr> Expansion Within a Context</a></li><li class="tocline"><a href="#sets-and-lists" class="tocxref"><span class="secno">4.9 </span>Sets and Lists</a></li><li class="tocline"><a href="#embedding" class="tocxref"><span class="secno">4.10 </span>Embedding</a></li><li class="tocline"><a href="#named-graphs" class="tocxref"><span class="secno">4.11 </span>Named Graphs</a></li><li class="tocline"><a href="#identifying-unlabeled-nodes" class="tocxref"><span class="secno">4.12 </span>Identifying Unlabeled Nodes</a></li><li class="tocline"><a href="#aliasing-keywords" class="tocxref"><span class="secno">4.13 </span>Aliasing Keywords</a></li><li class="tocline"><a href="#expanded-document-form" class="tocxref"><span class="secno">4.14 </span>Expanded Document Form</a></li><li class="tocline"><a href="#compact-document-form" class="tocxref"><span class="secno">4.15 </span>Compact Document Form</a></li></ul></li><li class="tocline"><a href="#json-ld-grammar" class="tocxref"><span class="secno">A. </span>JSON-LD Grammar</a><ul class="toc"><li class="tocline"><a href="#grammar-node-definition" class="tocxref"><span class="secno">A.1 </span>Node Definition</a></li><li class="tocline"><a href="#grammar-node-reference" class="tocxref"><span class="secno">A.2 </span>Node Reference</a></li><li class="tocline"><a href="#grammar-language-map" class="tocxref"><span class="secno">A.3 </span>Language Map</a></li><li class="tocline"><a href="#grammar-expanded-values" class="tocxref"><span class="secno">A.4 </span>Expanded Values</a></li><li class="tocline"><a href="#grammar-set-list" class="tocxref"><span class="secno">A.5 </span>List and Set Values</a></li><li class="tocline"><a href="#grammar-context" class="tocxref"><span class="secno">A.6 </span>Context Definition</a></li></ul></li><li class="tocline"><a href="#relationship-to-other-linked-data-formats-and-data-models" class="tocxref"><span class="secno">B. </span>Relationship to Other Linked Data Formats and Data Models</a><ul class="toc"><li class="tocline"><a href="#rdf" class="tocxref"><span class="secno">B.1 </span>RDF</a></li><li class="tocline"><a href="#turtle" class="tocxref"><span class="secno">B.2 </span>Turtle</a><ul class="toc"><li class="tocline"><a href="#prefix-definitions" class="tocxref"><span class="secno">B.2.1 </span>Prefix definitions</a></li><li class="tocline"><a href="#embedding-1" class="tocxref"><span class="secno">B.2.2 </span>Embedding</a></li><li class="tocline"><a href="#lists" class="tocxref"><span class="secno">B.2.3 </span>Lists</a></li></ul></li><li class="tocline"><a href="#rdfa" class="tocxref"><span class="secno">B.3 </span>RDFa</a></li><li class="tocline"><a href="#microformats" class="tocxref"><span class="secno">B.4 </span>Microformats</a></li><li class="tocline"><a href="#microdata" class="tocxref"><span class="secno">B.5 </span>Microdata</a></li></ul></li><li class="tocline"><a href="#iana-considerations" class="tocxref"><span class="secno">C. </span>IANA Considerations</a></li><li class="tocline"><a href="#acknowledgements" class="tocxref"><span class="secno">D. </span>Acknowledgements</a></li><li class="tocline"><a href="#references" class="tocxref"><span class="secno">E. </span>References</a><ul class="toc"><li class="tocline"><a href="#normative-references" class="tocxref"><span class="secno">E.1 </span>Normative references</a></li><li class="tocline"><a href="#informative-references" class="tocxref"><span class="secno">E.2 </span>Informative references</a></li></ul></li></ul></section>



<section class="informative" id="introduction">

<!--OddPage-->
<h2><span class="secno">1. </span>Introduction</h2><p><em>This section is non-normative.</em></p>

<p>
JSON, as specified in [<cite><a class="bibref" href="#bib-RFC4627">RFC4627</a></cite>], is a simple language for representing
data on the Web. <a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">Linked Data</a> is a technique for creating a network
of inter-connected data across different Web documents and Web sites.
A <em>document</em> in this data network is typically identified using an
<a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> (Internationalized Resource Identifier). A software program
can typically follow an <abbr title="Internationalized Resource Identifier">IRI</abbr> just like you follow a URL by putting it into your
browser's location bar. By following IRIs, a software program can find
more information about the <em>document</em> and the <em>thing</em>s that
the document describes.
These <em>things</em> may also be identified using <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>s. The
<a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> allows a software program to start at one
<em>document</em> and follow links to other
<em>documents</em> or <em>things</em> in order to learn more about all of
the <em>documents</em> and <em>things</em> described on the Web.
</p>

<p>
JSON-LD is designed as a lightweight syntax that can be used to express
<a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">Linked Data</a>. It is primarily intended to be a way to use Linked Data
in Javascript and other Web-based programming environments. It is also
useful when building inter-operable Web services and when storing Linked
Data in JSON-based document storage engines. It is practical and designed
to be as simple as possible, utilizing the large number of JSON parsers
and libraries available today.
</p>

<p>
The syntax does not necessarily require applications to change their JSON, but
allows one to easily add meaning by simply adding or referencing a context.
The syntax is designed to not disturb already deployed systems
running on JSON, but provide a smooth upgrade path from JSON to JSON-LD.
Finally, the format is intended to be easy to parse, efficient
to generate, and only requires a very small memory footprint in order to
operate.
</p>

<section id="how-to-read-this-document">
<h3><span class="secno">1.1 </span>How to Read this Document</h3><p><em>This section is non-normative.</em></p>

<p>
This document is a detailed specification for a serialization of Linked
Data in JSON. The document is primarily intended for the following audiences:
</p>

<ul>
  <li>Software developers that want to encode Linked Data in a way that is
  cross-language compatible via JSON.</li>
  <li>Software developers that want to understand the design decisions and
  language syntax for JSON-LD.</li>
  <li>Software developers that want to implement processors and APIs for
  JSON-LD.</li>
</ul>

<p>This specification does not describe the programming interfaces for the
JSON-LD Syntax. The specification that describes the programming interfaces
for JSON-LD documents is the JSON-LD Application Programming Interface
[<cite><a class="bibref" href="#bib-JSON-LD-API">JSON-LD-API</a></cite>].</p>

<p>
To understand the basics in this specification you must first be familiar with
JSON, which is detailed in [<cite><a class="bibref" href="#bib-RFC4627">RFC4627</a></cite>].</p>

</section>

<section id="general-terminology">
  <h3><span class="secno">1.2 </span>General Terminology</h3>

  <p>The following is an explanation of the general terminology used in this document:</p>

  <dl>
    <dt><dfn title="json_object" id="dfn-json_object">JSON object</dfn></dt><dd>
      An object structure is represented as a pair of curly brackets
      surrounding zero or more name-value pairs. A name is a
      <a class="tref internalDFN" title="string" href="#dfn-string">string</a>. A single colon comes after each name, separating the
      name from the value. A single comma separates a value from a following
      name. The names within an object <em class="rfc2119" title="should">should</em> be unique.
    </dd>
    <dt><dfn title="array" id="dfn-array">array</dfn></dt>
    <dd>
      In JSON, an array is an <em>ordered</em> sequence of zero or more values.
      An array is represented as square brackets surrounding
      zero or more values that are separated by commas.
      While JSON-LD uses the same array representation as JSON,
      the collection is <em>unordered</em> by default. While order is
      preserved in regular JSON arrays, it is not in regular JSON-LD arrays
      unless specific markup is provided
      (see <a href="#sets-and-lists" class="sec-ref"><span class="secno">4.9</span> <span class="sec-title">Sets and Lists</span></a>).</dd>
    <dt><dfn title="string" id="dfn-string">string</dfn></dt><dd>
      A string is a sequence of zero or more Unicode characters,
      wrapped in double quotes, using backslash escapes (if necessary). A
      character is represented as a single character string.</dd>
    <dt><dfn title="number" id="dfn-number">number</dfn></dt>
    <dd>
      A number is similar to that used in most programming languages, except
      that the octal and hexadecimal formats are not used and that leading
      zeros are not allowed.</dd>
    <dt><dfn title="true" id="dfn-true">true</dfn> and <dfn title="false" id="dfn-false">false</dfn></dt><dd>
      Values that are used to express one of two possible boolean states.</dd>
    <dt><dfn title="null" id="dfn-null">null</dfn></dt><dd>
      The null value is used to make the JSON-LD processor &quot;forget&quot; any
      previously defined JSON key that is associated with the null value.
      If a previous definition doesn't exist, the entire key-value is ignored.
      If a previous definition of the key does exist, the previous
      definition is undefined.</dd>
    <dt><dfn title="node_definition" id="dfn-node_definition">node definition</dfn></dt><dd>
      A <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> used to represent a <a class="tref internalDFN" title="node" href="#dfn-node">node</a> and
      one or more properties of that node. A <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> is a
      node definition if it does not contain they keys <code>@value</code>,
      <code>@list</code> or <code>@set</code> and it has one or more keys other
      than <code>@id</code>. A node definition <em class="rfc2119" title="may">may</em> be spread among different
      parts of a document or even between different documents.</dd>
    <dt><dfn title="node_reference" id="dfn-node_reference">node reference</dfn></dt><dd>
      A <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> used to reference a node having only the
      <code>@id</code> key.</dd>
  </dl>
<p></p>

</section>

</section>

<section class="informative" id="design-goals-and-rationale">

<!--OddPage-->
<h2><span class="secno">2. </span>Design Goals and Rationale</h2><p><em>This section is non-normative.</em></p>

<p>A number of design goals were established before the creation of this
  markup language:</p>

<dl>
 <dt>Simplicity</dt>
 <dd>No extra
 processors or software libraries should be necessary to use JSON-LD in its most
 basic form. The language will provide developers with a very easy
 learning curve. Developers need only know JSON and two
 <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keywords</a> (<code>@context</code>
 and <code>@id</code>) to use the basic functionality in JSON-LD.</dd>
 <dt>Compatibility</dt>
 <dd>The JSON-LD markup must be 100% compatible with JSON. This ensures that
 all of the standard JSON libraries work seamlessly with JSON-LD documents.</dd>
 <dt>Expressiveness</dt>
 <dd>The syntax must be able to express directed graphs, which have been proven
 to be able to express almost every real world data model.</dd>
 <dt>Terseness</dt>
 <dd>The JSON-LD syntax must be very terse and human readable, requiring as
 little effort as possible from the developer.</dd>

<!--<dt>Pragmatism</dt>
 <dd>Mixing the expression of pure Linked Data with data that is not
 linked was an approach that was driven by pragmatism. JSON-LD attempts to be
 more practical than theoretical in its approach to Linked Data.</dd>-->

 <dt>Zero Edits, most of the time</dt>
 <dd>JSON-LD must provide a
 <a href="#referencing-contexts-from-json-documents">mechanism</a>
 that allows developers to specify <a class="tref internalDFN" title="context" href="#dfn-context">context</a> in a way that is
 out-of-band.
 This allows organizations that have
 already deployed large JSON-based infrastructure to add meaning to their
 JSON documents in a way that is not disruptive to their day-to-day operations and is
 transparent to their current customers. At times, mapping JSON to
 a graph representation can become difficult. In these instances, rather than
 having JSON-LD support an esoteric use case, we chose not to support the
 use case and support a simplified syntax instead. So, while Zero Edits is
 a design goal, it is not always possible without adding great complexity to
 the language.
 </dd>
 <dt>One-pass Processing</dt>
 <dd>JSON-LD supports one-pass processing, which results in a very small memory
 footprint when processing documents. For example, to expand a JSON-LD document
 from a compacted form, only one pass is required over the data.</dd>
 <dt>Linked Data-centric</dt>
 <dd>The focus on Linked Data is placed at a much higher priority than the
 focus on the Semantic Web. One outcome of this ordering of
 priorities is an aggressively reduced focus on the Semantic Web stack
 (RDF [<cite><a class="bibref" href="#bib-RDF-CONCEPTS">RDF-CONCEPTS</a></cite>], TURTLE [<cite><a class="bibref" href="#bib-TURTLE-TR">TURTLE-TR</a></cite>], triple stores, and
 SPARQL [<cite><a class="bibref" href="#bib-RDF-SPARQL-QUERY">RDF-SPARQL-QUERY</a></cite>]).
 While this may be off-putting to proponents of the Semantic Web, the audience
 for this specification are Web developers that want a gentler introduction
 and a simpler technology stack for using Linked Data in their Web applications.
 Semantic Web concepts, such as conversion to and from RDF, are fully supported
 by JSON-LD, but the implementation of these features are not elaborated upon
 in this specification. See <a href="#relationship-to-other-linked-data-formats-and-data-models" class="sec-ref"><span class="secno">B.</span> <span class="sec-title">Relationship to Other Linked Data Formats and Data Models</span></a>
 for more information about how JSON-LD integrates into the more traditional
 Semantic Web stack.
 </dd>
</dl>
</section>

<section class="normative" id="basic-concepts">

<!--OddPage-->
<h2><span class="secno">3. </span>Basic Concepts</h2>

<em>This section is normative.</em>

<p>JSON-LD is designed to ensure that <a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">Linked Data</a> concepts can be
marked up in a way that is simple to understand and create by Web authors.
In many cases, regular JSON markup can become Linked Data with the
simple addition of a <a class="tref internalDFN" title="context" href="#dfn-context">context</a>. As more JSON-LD features are
used, more semantics are added to the JSON markup.</p>

<section id="linked-data">
<h3><span class="secno">3.1 </span>Linked Data</h3>

<p>
The following definition for <a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">Linked Data</a> is the one that will
be used for this specification.
</p>
<ol>
  <li><dfn title="linked_data" id="dfn-linked_data">Linked Data</dfn> is a set of documents, each containing a representation of a <a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">linked data graph</a>.</li>
  <li>A <dfn title="linked_data_graph" id="dfn-linked_data_graph">linked data graph</dfn> is an unordered labeled directed graph, where <dfn title="node" id="dfn-node">nodes</dfn> are <a class="tref internalDFN" title="iri" href="#dfn-iri">IRIs</a> or <a class="tref internalDFN" title="blank_node" href="#dfn-blank_node">Blank Nodes</a>, or other values.</li>
  <li>A <a class="tref internalDFN" title="node" href="#dfn-node">node</a> having an outgoing edge <em class="rfc2119" title="must">must</em> be an <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> or <a class="tref internalDFN" title="blank_node" href="#dfn-blank_node">Blank Node</a>.</li>
  <li>A <a class="tref internalDFN" title="node" href="#dfn-node">node</a> having an incoming edge <em class="rfc2119" title="must">must</em> be an <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>, <a class="tref internalDFN" title="blank_node" href="#dfn-blank_node">Blank Node</a>, or value such as a number or string.</li>
  <li>A <a class="tref internalDFN" title="node" href="#dfn-node">node</a> <em class="rfc2119" title="may">may</em> have both incoming and outgoing edges.</li>
  <li>An edge <em class="rfc2119" title="must">must</em> be labeled with an <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></a>, within the JSON-LD syntax, this label is called a <dfn title="property" id="dfn-property">property</dfn>.</li>
  <li><a class="tref internalDFN" title="iri" href="#dfn-iri">IRIs</a> used within a <a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">linked data graph</a> <em class="rfc2119" title="should">should</em> be dereferenceable to a <a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">Linked Data</a> document describing the resource denoted by that <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>.</li>
</ol>

<div class="note"><div class="note-title"><span>Note</span></div><div class="">
  <p>A <a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">Linked Data</a> document does not necessarily need to be expressed in JSON-LD. The notion of
    <a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">Linked Data</a> is a concept independent of any given serialization format. In particular, any document based on
    an RDF serialization format is a <a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">Linked Data</a> document.</p>

  <p>This definition of <a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">Linked Data</a> is entirely consistent with that in [<cite><a class="bibref" href="#bib-RDF-CONCEPTS">RDF-CONCEPTS</a></cite>], although
    <a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">Linked Data</a> may not be a valid RDF document, any RDF document is an expression of <a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">Linked Data</a>.</p>
</div></div>

<div class="issue"><div class="issue-title"><span>Issue</span></div><p class="">An illustration of a linked data graph would probably help here.</p></div>

<div class="issue"><div class="issue-title"><a href="https://github.com/json-ld/json-ld.org/issues/47"><span>Issue 47</span></a></div><div class="">
  <p>Richard Cyganiak suggests that the data model is at odds with [<cite><a class="bibref" href="#bib-RDF-CONCEPTS">RDF-CONCEPTS</a></cite>] and should
    be more closely aligned with it instead of creating new terminology.</p>
  <p>Note that this definition is provisional, and may be reverted to something closer to the original depending on community feedback.</p>
  <ol>
    <li><a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">Linked Data</a> is a set of documents, each containing a representation of a <a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">linked data graph</a>.</li>
    <li>A <a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">linked data graph</a> is an unordered labeled directed graph, where nodes are <em>subject</em>s or <em>object</em>s, and edges are labeled using <a class="tref internalDFN" title="property" href="#dfn-property">properties</a>.</li>
    <li>A <em>subject</em> is any node in a <a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">linked data graph</a> with at least one outgoing edge.</li>
    <li>A <em>subject</em> <em class="rfc2119" title="should">should</em> be labeled with an <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> (an Internationalized Resource Identifier as described in [<cite><a class="bibref" href="#bib-RFC3987">RFC3987</a></cite>]).</li>
    <li>An <em>object</em> is a node in a <a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">linked data graph</a> with at least one incoming edge.</li>
    <li>An <em>object</em> <em class="rfc2119" title="may">may</em> be labeled with an <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> or a label that is not an <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> such as plain text, internationalized text, or a strictly-typed data value.</li>
    <li>A node <em class="rfc2119" title="may">may</em> be a <em>subject</em> and an <em>object</em> at the same time.</li>
    <li>A <a class="tref internalDFN" title="property" href="#dfn-property">property</a> is the label on an edge in a
      <a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">linked data graph</a>.</li>
    <li>A <a class="tref internalDFN" title="property" href="#dfn-property">property</a> <em class="rfc2119" title="should">should</em> be an <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>.</li>
    <li>An <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> that is a label in a <a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">linked data graph</a> <em class="rfc2119" title="should">should</em> be dereferencable to a <a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">Linked Data</a> document describing the labeled <em>subject</em>, <a class="tref internalDFN" title="property" href="#dfn-property">property</a> or <em>object</em>.</li>
  </ol>
</div></div>

<div class="note"><div class="note-title"><span>Note</span></div><p class="">JSON-LD allows properties to be BNodes, while RDF does
  not. When used as just JSON-LD, this is not unreasonable;
  it only becomes an issue (and could raise an exception) when
  transformed to RDF.</p></div>

<p>Note that the definition for <a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">Linked Data</a> above is silent on the
topic of <a class="tref internalDFN" title="unlabeled_node" href="#dfn-unlabeled_node">unlabeled nodes</a>. Nevertheless, this specification allows for the expression
of <a class="tref internalDFN" title="unlabeled_node" href="#dfn-unlabeled_node">unlabeled nodes</a>, as most graph-based data sets on the Web contain a number
of associated nodes that are not named and thus are not directly
de-referenceable.
</p>

<p>JSON-LD defines a mechanism to map JSON terms, i.e., keys and values, to IRIs. This does not mean
that JSON-LD requires every key or value to be an <abbr title="Internationalized Resource Identifier">IRI</abbr>, but rather ensures that
keys and values can be mapped to IRIs if the developer desires to transform
their data into <a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">Linked Data</a>. There are a few techniques that can ensure
that developers will generate good Linked Data for the Web. JSON-LD
formalizes those techniques.
</p>

<p>We will be using the following JSON markup as the example for the
rest of this section:
</p>

<div class="example"><div class="example-title"><span>Example 1</span>: Sample JSON object</div><pre class="example">{
  &quot;name&quot;: &quot;Manu Sporny&quot;,
  &quot;homepage&quot;: &quot;http://manu.sporny.org/&quot;,
  &quot;depiction&quot;: &quot;http://twitter.com/account/profile_image/manusporny&quot;
}</pre></div>

</section>

<section id="syntax-tokens-and-keywords">
<h3><span class="secno">3.2 </span>Syntax Tokens and Keywords</h3>

<p>JSON-LD specifies a number of syntax tokens and <dfn title="keyword" id="dfn-keyword">keywords</dfn>
that are a core part of the language:</p>

<dl>
<dt><code>@context</code></dt>
<dd>Used to define the short-hand names that are used throughout a JSON-LD
  document. These short-hand names are called <a class="tref internalDFN" title="term" href="#dfn-term">term</a>s and help
  developers to express specific identifiers in a compact manner. The
  <code>@context</code> keyword is described in detail in the section titled
  <a href="#the-context" class="sec-ref"><span class="secno">3.3</span> <span class="sec-title">The Context</span></a>.</dd>
<dt><code>@graph</code></dt><dd>Used to explicitly label a <a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">linked data graph</a>.
  This keyword is described in <a href="#named-graphs" class="sec-ref"><span class="secno">4.11</span> <span class="sec-title">Named Graphs</span></a>.</dd>
<dt><code>@id</code></dt>
<dd>Used to uniquely identify <em>things</em> that are being described in the document.
  This keyword is described in <a href="#node-identifiers" class="sec-ref"><span class="secno">3.6</span> <span class="sec-title">Node Identifiers</span></a>.</dd>
<dt><code>@value</code></dt>
<dd>Used to specify the data that is associated with a particular
  <a class="tref internalDFN" title="property" href="#dfn-property">property</a> in the graph. This keyword is described in
  <a href="#string-internationalization" class="sec-ref"><span class="secno">3.8</span> <span class="sec-title">String Internationalization</span></a> and
  <a href="#typed-values" class="sec-ref"><span class="secno">4.2</span> <span class="sec-title">Typed Values</span></a>.</dd>
<dt><code>@language</code></dt>
<dd>Used to specify the native language for a particular value or the default
  language of a JSON-LD document. This keyword is described in the section titled
  <a href="#string-internationalization" class="sec-ref"><span class="secno">3.8</span> <span class="sec-title">String Internationalization</span></a>.</dd>
<dt><code>@type</code></dt>
<dd>Used to set the data type of a <a class="tref internalDFN" title="node" href="#dfn-node">node</a> or
  <a class="tref internalDFN" title="typed_value" href="#dfn-typed_value">typed value</a>. This keyword is described in the section titled
  <a href="#typed-values" class="sec-ref"><span class="secno">4.2</span> <span class="sec-title">Typed Values</span></a>.</dd>
<dt><code>@container</code></dt>
<dd>Used to set the container of a particular value.
  This keyword is described in the section titled <a href="#sets-and-lists" class="sec-ref"><span class="secno">4.9</span> <span class="sec-title">Sets and Lists</span></a>.</dd>
<dt><code>@list</code></dt>
<dd>Used to express an ordered set of data.
  This keyword is described in the section titled <a href="#sets-and-lists" class="sec-ref"><span class="secno">4.9</span> <span class="sec-title">Sets and Lists</span></a>.</dd>
<dt><code>@set</code></dt>
<dd>Used to express an unordered set of data.
  This keyword is described in the section titled <a href="#sets-and-lists" class="sec-ref"><span class="secno">4.9</span> <span class="sec-title">Sets and Lists</span></a>.</dd>
<dt><code>@vocab</code></dt>
<dd>Used to set the base <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> for all property IRIs affected by the
  <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a>. This keyword is described in section <a href="#iris" class="sec-ref"><span class="secno">3.5</span> <span class="sec-title">IRIs</span></a>.</dd>
<dt><code>:</code></dt>
<dd>The separator for JSON keys and values that use
  <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact IRIs</a>.</dd>
</dl>

<p>For the avoidance of doubt, all keys, <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keywords</a>, and values in JSON-LD are
case-sensitive.</p>
</section>

<section id="the-context">
<h3><span class="secno">3.3 </span>The Context</h3>

<p>In JSON-LD, a <dfn title="context" id="dfn-context">context</dfn> is used to map <a class="tref internalDFN" title="term" href="#dfn-term">term</a>s, i.e., properties with associated
  values in an JSON document, to <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>s. A <dfn title="term" id="dfn-term">term</dfn> is a short word that expands to an
  <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>. <a class="tref internalDFN" title="term" href="#dfn-term">Term</a>s <em class="rfc2119" title="may">may</em> be defined as any valid JSON <a class="tref internalDFN" title="string" href="#dfn-string">string</a> other
  than a JSON-LD <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a>. To avoid
  forward-compatibility issues, <a class="tref internalDFN" title="term" href="#dfn-term">term</a>s starting with an <code>@</code> character <em class="rfc2119" title="should not">should not</em> be used
  as they might be used as <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keywords</a> in future versions of JSON-LD. Furthermore,
  the use of empty terms (<code>&quot;&quot;</code>) is discouraged as not all programming languages are able to handle
  empty property names.</p>
<p>The Web uses <a class="tref internalDFN" title="iri" href="#dfn-iri">IRIs</a> for unambiguous identification. The
  idea is that these <a class="tref internalDFN" title="term" href="#dfn-term">term</a>s mean something that may be of use to other developers and that it is useful to
  give them an unambiguous identifier. That is, it is useful for <a class="tref internalDFN" title="term" href="#dfn-term">term</a>s to expand to IRIs so that
  developers don't accidentally step on each other's <dfn title="vocabulary" id="dfn-vocabulary">vocabulary</dfn> terms and other resources. Furthermore, developers, and
  machines, are able to use this <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> (by plugging it directly into a web browser, for instance) to go to
  the term and get a definition of what the term means. This mechanism is analogous to the way we can use
  <a href="http://wordnet.princeton.edu/">WordNet</a> today to see the definition of words in the English language.
  Developers and machines need the same sort of definition of terms. <a class="tref internalDFN" title="iri" href="#dfn-iri">IRIs</a> provide a way to
  ensure that these terms are unambiguous. For example, the term <code>name</code> may
  map directly to the <abbr title="Internationalized Resource Identifier">IRI</abbr> <code>http://xmlns.com/foaf/0.1/name</code>. This allows JSON-LD documents to be constructed
  using the common JSON practice of simple name/value pairs while ensuring that the data is useful outside of the
  page, API or database in which it resides. The value of a term mapping
  <em class="rfc2119" title="must">must</em> be either; 1) a simple string with the lexical form of an <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></a> or
  2) <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></a>, or 3) an <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> containing an
  <code>@id</code>, <code>@type</code>, <code>@language</code>, or <code>@container</code> keyword
  (all other keywords are ignored by a JSON-LD processor).
</p>

<p>These Linked Data <a class="tref internalDFN" title="term" href="#dfn-term">term</a>s are typically collected in a
context document that would look something like this:</p>

<div class="example"><div class="example-title"><span>Example 2</span>: Context definition</div><pre class="example">{
  &quot;@context&quot;:
  {
    &quot;name&quot;: &quot;http://xmlns.com/foaf/0.1/name&quot;,
    &quot;depiction&quot;:
    {
      &quot;@id&quot;: &quot;http://xmlns.com/foaf/0.1/depiction&quot;,
      &quot;@type&quot;: &quot;@id&quot;
    },
    &quot;homepage&quot;:
    {
      &quot;@id&quot;: &quot;http://xmlns.com/foaf/0.1/homepage&quot;,
      &quot;@type&quot;: &quot;@id&quot;
    },
  }
}</pre></div>

<p>Assuming that this context document can be retrieved at <code>http://json-ld.org/contexts/person.jsonld</code>,
  it can be referenced from a JSON-LD document by adding a single line. The JSON markup shown in the previous
  section could be changed as follows:</p>

<div class="example"><div class="example-title"><span>Example 3</span>: Adding context reference to JSON document</div><pre class="example">{
  <span class="diff">&quot;@context&quot;: &quot;http://json-ld.org/contexts/person.jsonld&quot;,</span>
  &quot;name&quot;: &quot;Manu Sporny&quot;,
  &quot;homepage&quot;: &quot;http://manu.sporny.org/&quot;,
  &quot;depiction&quot;: &quot;http://twitter.com/account/profile_image/manusporny&quot;
}</pre></div>

<p>The additions above transform the previous JSON document into a JSON document
with added semantics because the <code>@context</code> specifies how the
<strong>name</strong>, <strong>homepage</strong>, and <strong>depiction</strong>
terms map to <a class="tref internalDFN" title="iri" href="#dfn-iri">IRIs</a>.
Mapping those keys to IRIs gives the data global context. If two
developers use the same <abbr title="Internationalized Resource Identifier">IRI</abbr> to describe a property, they are more than likely
expressing the same concept. This allows both developers to re-use each others'
data without having to agree to how their data will interoperate on a
site-by-site basis. Contexts may also contain type information
for certain <a class="tref internalDFN" title="term" href="#dfn-term">term</a>s as well as other processing instructions for
the JSON-LD processor.</p>

<div class="note"><div class="note-title"><span>Note</span></div><p class="">External JSON-LD context documents <em class="rfc2119" title="may">may</em> contain extra information
located outside of the <code>@context</code> key, such as documentation about the
<a class="tref internalDFN" title="term" href="#dfn-term">terms</a> declared in the document. When importing a
<code>@context</code> value from an external JSON-LD context document, any extra
information contained outside of the <code>@context</code> value <em class="rfc2119" title="must">must</em> be discarded.</p></div>

<p>Contexts <em class="rfc2119" title="may">may</em> be specified in-line. This ensures that JSON-LD documents
can be processed when a JSON-LD processor does not have access to the Web.</p>

<div class="example"><div class="example-title"><span>Example 4</span>: In-line context definition</div><pre class="example">{
  <span class="diff">&quot;@context&quot;:
  {
    &quot;name&quot;: &quot;http://xmlns.com/foaf/0.1/name&quot;,
    &quot;depiction&quot;:
    {
      &quot;@id&quot;: &quot;http://xmlns.com/foaf/0.1/depiction&quot;,
      &quot;@type&quot;: &quot;@id&quot;
    },
    &quot;homepage&quot;:
    {
      &quot;@id&quot;: &quot;http://xmlns.com/foaf/0.1/homepage&quot;,
      &quot;@type&quot;: &quot;@id&quot;
    },
  },</span>
  &quot;name&quot;: &quot;Manu Sporny&quot;,
  &quot;homepage&quot;: &quot;http://manu.sporny.org/&quot;,
  &quot;depiction&quot;: &quot;http://twitter.com/account/profile_image/manusporny&quot;
}</pre></div>

<p>Contexts <em class="rfc2119" title="may">may</em> be used at any time a <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a> is defined.
  A <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a> <em class="rfc2119" title="may">may</em> specify multiple contexts, using an
  <a class="tref internalDFN" title="array" href="#dfn-array">array</a>, which is processed in order. This is useful
  when an author would like to use an existing context and add
  application-specific terms to the existing context. Duplicate context
  <a class="tref internalDFN" title="term" href="#dfn-term">term</a>s <em class="rfc2119" title="must">must</em> be overridden using a last-defined-overrides
  mechanism.</p>

<div class="example"><div class="example-title"><span>Example 5</span>: Scoped contexts within node definitions</div><pre class="example">{
  <span class="diff">&quot;@context&quot;:
  {
    &quot;name&quot;: &quot;http://example.com/person#name&quot;,
    &quot;details&quot;: &quot;http://example.com/person#details&quot;
  },</span>
  &quot;<span class="diff">name</span>&quot;: &quot;Markus Lanthaler&quot;,
  ...
  &quot;details&quot;:
  {
    <span class="diff">&quot;@context&quot;: {
      &quot;name&quot;: &quot;http://example.com/organization#name&quot;
    },</span>
    &quot;<span class="diff">name</span>&quot;: &quot;Graz University of Technology&quot;
  }
}</pre></div>

<p>In the example above, the <code>name</code> prefix is overridden in the
  more deeply nested <code>details</code> structure. Note that this is
  rarely a good authoring practice and is typically used when there exist
  legacy applications that depend on the specific structure of the
  <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a>.</p>

<div class="note"><div class="note-title"><span>Note</span></div><p class="">If a <a class="tref internalDFN" title="term" href="#dfn-term">term</a> is re-defined within a context, all previous
  rules associated with the previous definition are removed. A <a class="tref internalDFN" title="term" href="#dfn-term">term</a> defined
  in a previous context <em class="rfc2119" title="must">must</em> be removed, if it is re-defined to <code>null</code>.</p></div>

<p>The set of contexts defined within a specific <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a> are
  referred to as <dfn title="local_context" id="dfn-local_context">local context</dfn>s. Setting the context to <code>null</code>
  effectively resets the <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a> to an empty context. The
  <dfn title="active_context" id="dfn-active_context">active context</dfn> refers to the accumulation of <a class="tref internalDFN" title="local_context" href="#dfn-local_context">local context</a>s
  that are in scope at a specific point within the document. The following example
  specifies an external context and then layers a local context on top of the external
  context:</p>

<div class="example"><div class="example-title"><span>Example 6</span>: Combining external and local contexts</div><pre class="example">{
  <span class="diff">&quot;@context&quot;: [
    &quot;http://json-ld.org/contexts/person.jsonld&quot;,
    {
      &quot;pic&quot;: &quot;http://xmlns.com/foaf/0.1/depiction&quot;
    }
  ],</span>
  &quot;name&quot;: &quot;Manu Sporny&quot;,
  &quot;homepage&quot;: &quot;http://manu.sporny.org/&quot;,
  <span class="diff">&quot;pic&quot;: &quot;http://twitter.com/account/profile_image/manusporny&quot;</span>
}</pre></div>

<div class="note"><div class="note-title"><span>Note</span></div><p class="">To ensure the best possible performance, it is a best practice to
  put the <a class="tref internalDFN" title="context" href="#dfn-context">context</a> definition at the top of the JSON-LD document. If it isn't listed
  first, processors have to save each key-value pair until the <a class="tref internalDFN" title="context" href="#dfn-context">context</a> is processed.
  This creates a memory and complexity burden for certain types of
  low-memory footprint JSON-LD processors.</p></div>

<div class="note"><div class="note-title"><span>Note</span></div><p class="">The <code>null</code> value is processed in a special way
  in JSON-LD. Unless otherwise specified, a JSON-LD processor <em class="rfc2119" title="must">must</em> act as if a
  key-value pair in the body of a JSON-LD document was never declared when
  the value equals <em>null</em>. If <code>@value</code>, <code>@list</code>,
  or <code>@set</code> is set to <em>null</em> in expanded form, then the
  entire <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> is ignored. If <code>@context</code> is set
  to <em>null</em>, the <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a> is reset and when used
  within a <a class="tref internalDFN" title="context" href="#dfn-context">context</a>, it removes any definition associated with
  the key, unless otherwise specified.</p></div>

</section>

<section id="from-json-to-json-ld">
<h3><span class="secno">3.4 </span>From JSON to JSON-LD</h3>

<p>If a set of <a class="tref internalDFN" title="term" href="#dfn-term">term</a>s such as, <strong>name</strong>,
<strong>homepage</strong>, and <strong>depiction</strong>,
are defined in a <a class="tref internalDFN" title="context" href="#dfn-context">context</a>, and that context is used to resolve the
names in <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON objects</a>, machines are able to automatically expand the terms to
something meaningful and unambiguous, like this:</p>

<div class="example"><div class="example-title"><span>Example 7</span>: Expanded terms</div><pre class="example">{
  &quot;<span class="diff">http://xmlns.com/foaf/0.1/name</span>&quot;: &quot;Manu Sporny&quot;,
  &quot;<span class="diff">http://xmlns.com/foaf/0.1/homepage</span>&quot;: &quot;http://manu.sporny.org&quot;
  &quot;<span class="diff">http://xmlns.com/foaf/0.1/depiction</span>&quot;: &quot;http://twitter.com/account/profile_image/manusporny&quot;
}</pre></div>

<p>Doing this allows JSON to be unambiguously machine-readable without
requiring developers to drastically change their workflow.</p>

<div class="note"><div class="note-title"><span>Note</span></div><p class="">The example above does not use the <code>@id</code> <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a>
to identify the node being described above. This type of node is called an
<a class="tref internalDFN" title="unlabeled_node" href="#dfn-unlabeled_node">unlabeled node</a>. It is advised that all nodes described in JSON-LD are
given unique identifiers via the <code>@id</code> keyword unless the data is not
intended to be linked to from other data sets.</p></div>

<p>A <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> used to define property values is called a
  <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a>. <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">Node definitions</a>
  do not require an <code>@id</code>.
  <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">Node definitions</a> that do not
  contain an <code>@id</code> are known as an <a class="tref internalDFN" title="unlabeled_node" href="#dfn-unlabeled_node">unlabeled nodes</a>.</p>

</section>

<section id="iris">
<h3><span class="secno">3.5 </span>IRIs</h3>

<p><a class="tref internalDFN" title="iri" href="#dfn-iri">IRIs</a> are fundamental to <a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">Linked Data</a>
as that is how most <a class="tref internalDFN" title="node" href="#dfn-node">nodes</a>s and all
<a class="tref internalDFN" title="property" href="#dfn-property">properties</a> are
identified. <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>s can be expressed in a variety of different ways
in JSON-LD.</p>

<p>An <dfn title="iri" id="dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></dfn>
  (an Internationalized Resource Identifier) is described in [<cite><a class="bibref" href="#bib-RFC3987">RFC3987</a></cite>])
  and the use with JSON-LD conforms to the definition of
  <cite><a href="http://www.w3.org/TR/rdf11-concepts/#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a></cite> in [<cite><a class="bibref" href="#bib-RDF-CONCEPTS">RDF-CONCEPTS</a></cite>].</p>

<ol>
  <li>Except within a <a class="tref internalDFN" title="context" href="#dfn-context">context</a> definition, <a class="tref internalDFN" title="term" href="#dfn-term">term</a>s in the key position in
    a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> that have a mapping or a vocabulary base <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> in the
    <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a> are expanded to an <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> by JSON-LD processors.</li>
  <li>An <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> is generated for the <a class="tref internalDFN" title="string" href="#dfn-string">string</a> value specified using
    <code>@id</code> or <code>@type</code>.</li>
  <li>An <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> is generated for the <a class="tref internalDFN" title="string" href="#dfn-string">string</a> value of any key for which there
    are <a class="tref internalDFN" title="coercion" href="#dfn-coercion">coercion</a> rules in effect that identify the value as an <code>@id</code>.</li>
</ol>

<p>IRIs may be represented as an <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></a>, a <a class="tref internalDFN" title="relative_iri" href="#dfn-relative_iri">relative <abbr title="Internationalized Resource Identifier">IRI</abbr></a>, a <a class="tref internalDFN" title="term" href="#dfn-term">term</a>,
  a <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></a>, or as a value relative to <code>@vocab</code>.</p>

<p>An <dfn title="absolute_iri" id="dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></dfn> is defined in [<cite><a class="bibref" href="#bib-RFC3987">RFC3987</a></cite>] containing a <em>scheme</em> along with
  <em>path</em> and optional <em>query</em> and <em>fragment</em> segments. A <dfn title="relative_iri" id="dfn-relative_iri">relative <abbr title="Internationalized Resource Identifier">IRI</abbr></dfn> is an <abbr title="Internationalized Resource Identifier">IRI</abbr>
  that is relative to some other <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></a>. In JSON-LD all <a class="tref internalDFN" title="relative_iri" href="#dfn-relative_iri">relative <abbr title="Internationalized Resource Identifier">IRI</abbr></a>s are resolved relative to the
  <dfn title="base_iri" id="dfn-base_iri">base <abbr title="Internationalized Resource Identifier">IRI</abbr></dfn> associated with the document (typically, the directory that contains the document or the document itself).</p>

<p>IRIs can be expressed directly in the key position like so:</p>

<div class="example"><div class="example-title"><span>Example 8</span>: IRI as a key</div><pre class="example">{
...
  &quot;<span class="diff">http://xmlns.com/foaf/0.1/name</span>&quot;: &quot;Manu Sporny&quot;,
...
}</pre></div>

<p>In the example above, the key <code>http://xmlns.com/foaf/0.1/name</code> is interpreted
  as an <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> because it contains a colon
  (<code>:</code>) and the 'http' <a class="tref internalDFN" title="prefix" href="#dfn-prefix">prefix</a> does not exist in
  the context.</p>

<p>Term expansion occurs for IRIs if the value matches a <a class="tref internalDFN" title="term" href="#dfn-term">term</a> defined within the
<a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a>:</p>

<div class="example"><div class="example-title"><span>Example 9</span>: Term expansion from context definition</div><pre class="example">{
  &quot;<span class="diff">@context</span>&quot;:
  {
    &quot;<span class="diff">name</span>&quot;: &quot;<span class="diff">http://xmlns.com/foaf/0.1/name</span>&quot;
...
  },
  &quot;<span class="diff">name</span>&quot;: &quot;Manu Sporny&quot;,
  &quot;status&quot;: &quot;trollin'&quot;,
...
}</pre></div>

<p><a class="tref internalDFN" title="term" href="#dfn-term">Term</a>s are case sensitive, and <em class="rfc2119" title="must">must</em> be matched using a case-sensitive comparison.</p>

<p>JSON keys that do not expand to an absolute <abbr title="Internationalized Resource Identifier">IRI</abbr> are ignored, or removed
in some cases, by the [<cite><a class="bibref" href="#bib-JSON-LD-API">JSON-LD-API</a></cite>]. However, JSON keys that do not include
a mapping in the <a class="tref internalDFN" title="context" href="#dfn-context">context</a> are still considered valid expressions
in JSON-LD documents - the keys just don't have any machine-readable,
semantic meaning.</p>

<p><a class="tref internalDFN" title="prefix" href="#dfn-prefix">Prefix</a>es are expanded when the form of the value is a
  <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></a> represented as a <code>prefix:suffix</code>
  combination, and the prefix matches a <a class="tref internalDFN" title="term" href="#dfn-term">term</a> defined within the
  <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a>:</p>

<div class="example"><div class="example-title"><span>Example 10</span>: Prefix expansion</div><pre class="example">{
  &quot;<span class="diff">@context</span>&quot;:
  {
    &quot;<span class="diff">foaf</span>&quot;: &quot;<span class="diff">http://xmlns.com/foaf/0.1/</span>&quot;
...
  },
  &quot;<span class="diff">foaf:name</span>&quot;: &quot;Manu Sporny&quot;,
...
}</pre></div>

<p><code>foaf:name</code> above will automatically expand out to the <abbr title="Internationalized Resource Identifier">IRI</abbr>
<code>http://xmlns.com/foaf/0.1/name</code>. See <a href="#compact-iris" class="sec-ref"><span class="secno">4.1</span> <span class="sec-title">Compact IRIs</span></a> for more details.</p>

<p>If the <code>@vocab</code> is set, all keys that do not match a <a class="tref internalDFN" title="term" href="#dfn-term">term</a> or a <a class="tref internalDFN" title="prefix" href="#dfn-prefix">prefix</a>
  are


It is often common that all types and properties come from the same vocabulary. JSON-LD's
<code>@vocab</code> keyword allows to set a base <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> to be used for all properties and types
that that do not match a <a class="tref internalDFN" title="term" href="#dfn-term">term</a>, a <a class="tref internalDFN" title="prefix" href="#dfn-prefix">prefix</a>, or an <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></a>
(i.e., do not contain a colon). The <code>@vocab</code> mapping <em class="rfc2119" title="must">must</em> have a value of a simple string with the
lexical form of an absolute <abbr title="Internationalized Resource Identifier">IRI</abbr>.</p>

<div class="example"><div class="example-title"><span>Example 11</span>: Vocabulary base IRI</div><pre class="example">{
  <span class="diff">&quot;@context&quot;: {
    &quot;@vocab&quot;: &quot;http://xmlns.com/foaf/1.0/&quot;
  },</span>
  &quot;@type&quot;: <span class="diff">&quot;Person&quot;</span>,
  <span class="diff">&quot;name&quot;</span>: &quot;Manu Sporny&quot;,
}</pre></div>

<p>An <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> is generated when a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> is used in the
  value position that contains an <code>@id</code> keyword:</p>

<div class="example"><div class="example-title"><span>Example 12</span>: Expanded IRI definition</div><pre class="example">{
...
  &quot;homepage&quot;: { &quot;<span class="diff">@id</span>&quot;: &quot;http://manu.sporny.org&quot; }
...
}</pre></div>

<div class="note"><div class="note-title"><span>Note</span></div><p class="">Specifying a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> with an
  <code>@id</code> key is used to identify that <a class="tref internalDFN" title="node" href="#dfn-node">node</a> using an
  <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>. When the object has only the <code>@id</code>, it
  is called a <a class="tref internalDFN" title="node_reference" href="#dfn-node_reference">node reference</a>.
  This facility <em class="rfc2119" title="may">may</em> also be used to link to another
  <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a> using a mechanism called
  <a class="tref internalDFN" title="embedding" href="#dfn-embedding">embedding</a>, which is covered in the section titled
  <a href="#embedding" class="sec-ref"><span class="secno">4.10</span> <span class="sec-title">Embedding</span></a>.</p></div>

<p>If type <a class="tref internalDFN" title="coercion" href="#dfn-coercion">coercion</a> rules are specified in the <code>@context</code> for
a particular <a class="tref internalDFN" title="term" href="#dfn-term">term</a> or property <abbr title="Internationalized Resource Identifier">IRI</abbr>, an <abbr title="Internationalized Resource Identifier">IRI</abbr> is generated:</p>

<div class="example"><div class="example-title"><span>Example 13</span>: Type coercion</div><pre class="example">{<span class="diff">
  &quot;@context&quot;:
  {
    ...
    &quot;homepage&quot;:
    {
      &quot;@id&quot;: &quot;http://xmlns.com/foaf/0.1/homepage&quot;,
      &quot;@type&quot;: &quot;@id&quot;
    }
    ...
  }</span>
...
  &quot;homepage&quot;: &quot;http://manu.sporny.org/&quot;,
...
}</pre></div>

<p>In the example above, even though the value
<code>http://manu.sporny.org/</code> is expressed as a JSON
<a class="tref internalDFN" title="string" href="#dfn-string">string</a>, the type <a class="tref internalDFN" title="coercion" href="#dfn-coercion">coercion</a> rules will transform
the value into an <abbr title="Internationalized Resource Identifier">IRI</abbr> when processed by a JSON-LD Processor.</p>

</section>

<section id="node-identifiers">
<h3><span class="secno">3.6 </span>Node Identifiers</h3>

<p>To be able to externally reference nodes in a graph, it is important that each node has
  an unambiguous identifier. <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>s are a fundamental concept of
  <a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">Linked Data</a>, and nodes should have a de-referencable
  identifier used to name and locate them. For nodes to be truly linked,
  de-referencing the identifier should result in a representation of that node
  (for example, using a URL to retrieve a web page).
  Associating an <abbr title="Internationalized Resource Identifier">IRI</abbr> with a node tells an application that the returned
  document contains a description of the node requested.</p>

<p>JSON-LD documents may also contain descriptions of other nodes, so it is necessary to be able to
  uniquely identify each node which may be externally referenced.</p>

<p>The node of a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> is identified using the <code>@id</code>
  <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a>:</p>

<div class="example"><div class="example-title"><span>Example 14</span>: Identifying a node</div><pre class="example">{
  &quot;@context&quot;:
  {
    ...
    &quot;homepage&quot;:
    {
      &quot;@id&quot;: &quot;http://xmlns.com/foaf/0.1/homepage&quot;,
      &quot;@type&quot;: &quot;@id&quot;
    }
    ...
  },
  &quot;<span class="diff">@id</span>&quot;: &quot;<span class="diff">http://example.org/people#joebob</span>&quot;,
  &quot;homepage&quot;: &quot;http://manu.sporny.org/&quot;,
...
}</pre></div>

<p>The example above contains a node identified by the <abbr title="Internationalized Resource Identifier">IRI</abbr>
  <code>http://example.org/people#joebob</code>.</p>

<p>A <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> used to define property values is called a
  <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a>. <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">Node definitions</a>
  do not require an <code>@id</code>. A <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a>
  that does not contain an <code>@id</code> property defines properties of an
  <a class="tref internalDFN" title="unlabeled_node" href="#dfn-unlabeled_node">unlabeled node</a>. <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">Node definitions</a> <em class="rfc2119" title="may">may</em>
  be spread among different parts of a document or even between different documents.</p>

<div class="note"><div class="note-title"><span>Note</span></div><p class="">To ensure the best possible performance, when possible, it is a best practice
  to put JSON-LD <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a>s, such as <code>@id</code> and
  <code>@context</code> before other key-value pairs in a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a>.
  However, keys in a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> are not ordered,
  so processors <em class="rfc2119" title="must not">must not</em> depend on key ordering. If keywords are not listed
  first, processors have to save each key-value pair until at least the
  <code>@context</code> and the <code>@id</code> are processed. Not
  specifying those keywords first creates a memory and complexity burden for
  low-memory footprint processors, forcing them to use more memory and
  computing cycles than necessary.</p></div>


</section>

<section id="specifying-the-type">
<h3><span class="secno">3.7 </span>Specifying the Type</h3>

<p>The type of a particular node can be specified using the <code>@type</code>
  <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a>. To be considered <a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">Linked Data</a>, types <em class="rfc2119" title="must">must</em>
  be uniquely identified by an <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>.</p>

<div class="example"><div class="example-title"><span>Example 15</span>: Specifying the type for a node</div><pre class="example">{
...
  &quot;@id&quot;: &quot;http://example.org/people#joebob&quot;,
  &quot;<span class="diff">@type</span>&quot;: &quot;<span class="diff">http://xmlns.com/foaf/0.1/Person</span>&quot;,
...
}</pre></div>

<p>A node can be assigned more than one type by using the following markup
pattern:</p>

<div class="example"><div class="example-title"><span>Example 16</span>: Specifying multiple types for a node</div><pre class="example">{
...
  &quot;@id&quot;: &quot;http://example.org/places#BrewEats&quot;,
  &quot;<span class="diff">@type</span>&quot;: <span class="diff">[&quot;http://schema.org/Restaurant&quot;, &quot;http://schema.org/Brewery&quot;]</span>
...
}</pre></div>


</section>

<section id="string-internationalization">
<h3><span class="secno">3.8 </span>String Internationalization</h3>

<p>At times, it is important to annotate a <a class="tref internalDFN" title="string" href="#dfn-string">string</a>
  with its language. In JSON-LD this is possible in a variety of ways.
  Firstly, it is possible to define a default language for a JSON-LD document
  by setting the <code>@language</code> key in the <code>@context</code> or in a
  <a class="tref internalDFN" title="term" href="#dfn-term">term</a> definition:</p>

<div class="example"><div class="example-title"><span>Example 17</span>: String Internationalization</div><pre class="example">{
  <span class="diff">&quot;@context&quot;:
  {
    ...
    &quot;@language&quot;: &quot;ja&quot;
  },</span>
  &quot;name&quot;: <span class="diff">&quot;花澄&quot;</span>,
  &quot;occupation&quot;: <span class="diff">&quot;科学者&quot;</span>
}</pre></div>

<p>The example above would associate the <code>ja</code> language
  code with the two <a class="tref internalDFN" title="string" href="#dfn-string">string</a>s <em>花澄</em> and <em>科学者</em>.
  Languages <em class="rfc2119" title="must">must</em> be well-formed language tags according to [<cite><a class="bibref" href="#bib-BCP47">BCP47</a></cite>].</p>

<p>It is possible to override the default language by using the expanded
form of a value:</p>

<div class="example"><div class="example-title"><span>Example 18</span>: Expanded value with language</div><pre class="example">{
  &quot;@context&quot;: {
    ...
    &quot;@language&quot;: &quot;ja&quot;
  },
  &quot;name&quot;: &quot;花澄&quot;,
  &quot;occupation&quot;: <span class="diff">{
    &quot;@value&quot;: &quot;Scientist&quot;,
    &quot;@language&quot;: &quot;en&quot;
  }</span>
}</pre></div>

<p>It is also possible to override the default language or specify a plain
value by omitting the <code>@language</code> tag or setting it to
<code>null</code> when expressing the expanded value:</p>

<div class="example"><div class="example-title"><span>Example 19</span>: Expanded value to remove language</div><pre class="example">{
  &quot;@context&quot;: {
    ...
    &quot;@language&quot;: &quot;ja&quot;
  },
  &quot;name&quot;: <span class="diff">{
    &quot;@value&quot;: &quot;Frank&quot;
  },</span>
  &quot;occupation&quot;: <span class="diff"> {
    &quot;@value&quot;: &quot;Ninja&quot;,
    &quot;@language&quot;: &quot;en&quot;
  }</span>,
  &quot;speciality&quot;: &quot;手裏剣&quot;
}</pre></div>

<div class="note"><div class="note-title"><span>Note</span></div><p class="">Please note that language associations <em class="rfc2119" title="must">must</em> only be applied
  to plain literal <a class="tref internalDFN" title="string" href="#dfn-string">string</a>s. That is, <a class="tref internalDFN" title="typed_value" href="#dfn-typed_value">typed value</a>s
  or values that are subject to <a href="#type-coercion" class="sec-ref"><span class="secno">4.6</span> <span class="sec-title">Type Coercion</span></a>
  won't be language tagged.</p></div>

<p>To clear the default language for a subtree, <code>@language</code> can
be set to <code>null</code> in a <a class="tref internalDFN" title="local_context" href="#dfn-local_context">local context</a> as follows:</p>

<div class="example"><div class="example-title"><span>Example 20</span>: Clearing default language</div><pre class="example">{
  &quot;@context&quot;: {
    ...
    &quot;@language&quot;: &quot;ja&quot;
  },
  &quot;name&quot;: &quot;花澄&quot;,
  &quot;details&quot;: {
<span class="diff">    &quot;@context&quot;: {
      &quot;@language&quot;: null
    },</span>
    &quot;occupation&quot;: &quot;Ninja&quot;
  }
}</pre></div>

<div class="note"><div class="note-title"><span>Note</span></div><p class="">JSON-LD allows one to associate language information with
  <a class="tref internalDFN" title="term" href="#dfn-term">term</a>s.
  See <a href="#expanded-term-definition" class="sec-ref"><span class="secno">4.5</span> <span class="sec-title">Expanded Term Definition</span></a> for
  more details.</p></div>

</section>

<section id="json-ld-syntax">
  <h3><span class="secno">3.9 </span>JSON-LD Syntax</h3>

  <p>A JSON-LD document is first, and foremost, a JSON document
    (as defined in [<cite><a class="bibref" href="#bib-RFC4627">RFC4627</a></cite>]), and any syntactically correct JSON document
    <em class="rfc2119" title="must">must</em> be processed by a conforming JSON-LD processor. However, JSON-LD
    describes a specific syntax to use for expressing Linked Data. This
    includes the use of specific keywords, as identified in <a href="#syntax-tokens-and-keywords" class="sec-ref"><span class="secno">3.2</span> <span class="sec-title">Syntax Tokens and Keywords</span></a> for
    expressing <a title="node definition">node definitions</a>, values,
    and the <a href="#dfn-context" class="internalDFN">context</a>. See <a href="#json-ld-grammar" class="sec-ref"><span class="secno">A.</span> <span class="sec-title">JSON-LD Grammar</span></a> for authoring
    guidelines and a BNF description of JSON-LD.</p>

</section>
</section>

<section id="advanced-concepts">

<!--OddPage-->
<h2><span class="secno">4. </span>Advanced Concepts</h2>

<em>This section is normative.</em>

<p>JSON-LD has a number of features that provide functionality above and beyond
the core functionality described above. The following section describes this
advanced functionality in more detail.
</p>

<section id="compact-iris">
  <h3><span class="secno">4.1 </span>Compact IRIs</h3>
  <p>
    <a class="tref internalDFN" title="term" href="#dfn-term">Term</a>s in <a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">Linked Data</a> documents may draw from
    a number of different <a class="tref internalDFN" title="vocabulary" href="#dfn-vocabulary">vocabularies</a>.
    At times, declaring every single <a class="tref internalDFN" title="term" href="#dfn-term">term</a> that a document uses can require the
    developer to declare tens, if not hundreds of potential
    <a class="tref internalDFN" title="vocabulary" href="#dfn-vocabulary">vocabulary</a> <a class="tref internalDFN" title="term" href="#dfn-term">term</a>s that are used across an
    application. This is a concern for at least two reasons: the
    first is the cognitive load on the developer of remembering all of the
    <a class="tref internalDFN" title="term" href="#dfn-term">term</a>s, and the second is the serialized size of the
    <a class="tref internalDFN" title="context" href="#dfn-context">context</a> if it is specified inline. In order to address these issues,
    the concept of a <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></a> is introduced.</p>
  <p>
    A <dfn title="compact_iri" id="dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></dfn> is a way of expressing an <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>
    using a <em>prefix</em> and <em>suffix</em> separated by a colon (<code>:</code>) which is
    similar to the <cite><a href="http://www.w3.org/TR/rdfa-core/#s_curies">CURIE Syntax</a></cite>
    in [<cite><a class="bibref" href="#bib-RDFA-CORE">RDFA-CORE</a></cite>]. The <dfn title="prefix" id="dfn-prefix">prefix</dfn> is a <a class="tref internalDFN" title="term" href="#dfn-term">term</a> taken from the
    <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a> and is a short string identifying a
    particular <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> in a JSON-LD document.
    For example, the prefix <code>foaf</code> may be used as a short
    hand for the Friend-of-a-Friend vocabulary, which is identified using
    the <abbr title="Internationalized Resource Identifier">IRI</abbr> <code>http://xmlns.com/foaf/0.1/</code>. A developer may append
    any of the FOAF <a class="tref internalDFN" title="vocabulary" href="#dfn-vocabulary">vocabulary</a> terms to the end of the prefix
    to specify a short-hand version of the <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></a> for the
    <a class="tref internalDFN" title="vocabulary" href="#dfn-vocabulary">vocabulary</a> term. For example, <code>foaf:name</code> would
    be expanded out to the <abbr title="Internationalized Resource Identifier">IRI</abbr> <code>http://xmlns.com/foaf/0.1/name</code>.
    Instead of having to remember and type out the entire <abbr title="Internationalized Resource Identifier">IRI</abbr>, the developer
    can instead use the prefix in their JSON-LD markup.
  </p>
  <p>Terms are interpreted as <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></a>s if they contain at least one
    colon and the first colon is not followed by two slashes (<code>//</code>, as in
    <code>http://example.com</code>). To generate the full <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>,
    the value is first split into a <em>prefix</em> and <em>suffix</em> at the first
    occurrence of a colon (<code>:</code>). If the <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a>
    contains a term mapping for <em>prefix</em>, an <abbr title="Internationalized Resource Identifier">IRI</abbr> is generated by
    prepending the mapped <em>prefix</em> to the (possibly empty) <em>suffix</em>
    using textual concatenation.  If no prefix mapping is defined, the value is interpreted
    as an <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></a>. If the prefix is an underscore
    (<code>_</code>), the <abbr title="Internationalized Resource Identifier">IRI</abbr> remains unchanged. This effectively means that every term
    containing a colon will be interpreted by a JSON-LD processor as an <abbr title="Internationalized Resource Identifier">IRI</abbr>.
  </p>
  <p>Consider the following example:</p>
  <div class="example"><div class="example-title"><span>Example 21</span>: Compact IRIs</div><pre class="example">{
  &quot;@context&quot;:
  {
    <span class="diff">&quot;dc&quot;: &quot;http://purl.org/dc/elements/1.1/&quot;,</span>
    <span class="diff">&quot;ex&quot;: &quot;http://example.org/vocab#&quot;</span>
  },
  &quot;@id&quot;: &quot;http://example.org/library&quot;,
  &quot;@type&quot;: <span class="diff">&quot;ex:Library&quot;</span>,
  <span class="diff">&quot;ex:contains&quot;</span>:
  {
    &quot;@id&quot;: &quot;http://example.org/library/the-republic&quot;,
    &quot;@type&quot;: <span class="diff">&quot;ex:Book&quot;</span>,
    <span class="diff">&quot;dc:creator&quot;</span>: &quot;Plato&quot;,
    <span class="diff">&quot;dc:title&quot;</span>: &quot;The Republic&quot;,
    <span class="diff">&quot;ex:contains&quot;</span>:
    {
      &quot;@id&quot;: &quot;http://example.org/library/the-republic#introduction&quot;,
      &quot;@type&quot;: <span class="diff">&quot;ex:Chapter&quot;</span>,
      <span class="diff">&quot;dc:description&quot;</span>: &quot;An introductory chapter on The Republic.&quot;,
      <span class="diff">&quot;dc:title&quot;</span>: &quot;The Introduction&quot;
    }
  }
}</pre></div>
  <p>
    In this example, two different <a class="tref internalDFN" title="vocabulary" href="#dfn-vocabulary">vocabularies</a>
    are referred to using prefixes. Those prefixes are then used as type and
    property values using the compact <abbr title="Internationalized Resource Identifier">IRI</abbr> <code>prefix:suffix</code> notation.
  </p>
  <p>It's also possible to use compact IRIs within the context as shown in the
    following example:</p>
  <div class="example"><div class="example-title"><span>Example 22</span>: Using vocabularies</div><pre class="example">{
  &quot;@context&quot;:
  {
    &quot;xsd&quot;: &quot;http://www.w3.org/2001/XMLSchema#&quot;,
    &quot;foaf&quot;: &quot;http://xmlns.com/foaf/0.1/&quot;,
    <span class="diff">&quot;foaf:homepage&quot;</span>: { &quot;@type&quot;: &quot;@id&quot; },
    &quot;picture&quot;: { &quot;@id&quot;: <span class="diff">&quot;foaf:depiction&quot;</span>, &quot;@type&quot;: &quot;@id&quot; }
  },
  &quot;@id&quot;: &quot;http://me.markus-lanthaler.com/&quot;,
  &quot;@type&quot;: &quot;foaf:Person&quot;,
  &quot;foaf:name&quot;: &quot;Markus Lanthaler&quot;,
  &quot;foaf:homepage&quot;: &quot;http://www.markus-lanthaler.com/&quot;,
  &quot;picture&quot;: &quot;http://twitter.com/account/profile_image/markuslanthaler&quot;
}</pre></div>
</section>

<section id="typed-values">
<h3><span class="secno">4.2 </span>Typed Values</h3>

<p>
  A value with an associated type, also known as a
  <dfn title="typed_value" id="dfn-typed_value">typed value</dfn>, is indicated by associating a value with
  an <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> which indicates the value's type. Typed values may be
  expressed in JSON-LD in three ways:
</p>

<ol>
  <li>By utilizing the <code>@type</code> <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a> when defining
    a <a class="tref internalDFN" title="term" href="#dfn-term">term</a> within a <code>@context</code> section.</li>
  <li>By utilizing the expanded form for specifying values.</li>
  <li>By using a native JSON type such as <a class="tref internalDFN" title="number" href="#dfn-number">number</a>, <a class="tref internalDFN" title="true" href="#dfn-true">true</a>, or <a class="tref internalDFN" title="false" href="#dfn-false">false</a>.</li>
</ol>

<p>The first example uses the <code>@type</code> keyword to associate a
type with a particular <a class="tref internalDFN" title="term" href="#dfn-term">term</a> in the <code>@context</code>:</p>

<div class="example"><div class="example-title"><span>Example 23</span>: Expanded term definition with type coercion</div><pre class="example">{
  <span class="diff">&quot;@context&quot;:
  {
    &quot;modified&quot;:
    {
      &quot;@id&quot;: &quot;http://purl.org/dc/terms/modified&quot;,
      &quot;@type&quot;: &quot;http://www.w3.org/2001/XMLSchema#dateTime&quot;
    }
  },</span>
...
  &quot;modified&quot;: &quot;2010-05-29T14:17:39+02:00&quot;,
...
}</pre></div>

<p>The <em>modified</em> key's value above is automatically type coerced to a
datetime value because of the information specified in the
<code>@context</code>.</p>

<p>The second example uses the expanded form of setting the type information
in the body of a JSON-LD document:</p>

<div class="example"><div class="example-title"><span>Example 24</span>: Expanded value with type</div><pre class="example">{
  &quot;@context&quot;:
  {
    &quot;modified&quot;:
    {
      &quot;@id&quot;: &quot;http://purl.org/dc/terms/modified&quot;
    }
  },
...
  &quot;modified&quot;:
  <span class="diff">{
    &quot;@value&quot;: &quot;2010-05-29T14:17:39+02:00&quot;,
    &quot;@type&quot;: &quot;http://www.w3.org/2001/XMLSchema#dateTime&quot;
  }</span>
...
}</pre></div>

<p>Both examples above would generate the value
  <code>2010-05-29T14:17:39+02:00</code> with the type
  <code>http://www.w3.org/2001/XMLSchema#dateTime</code>. Note that it is
  also possible to use a <a class="tref internalDFN" title="term" href="#dfn-term">term</a> or a <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></a> to
  express the value of a type.</p>

<p>The <code>@type</code> <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a> is also used to associate a type
  with a <a class="tref internalDFN" title="node" href="#dfn-node">node</a>. The concept of an <dfn title="node_type" id="dfn-node_type">node type</dfn> and
  a <dfn title="value_type" id="dfn-value_type">value type</dfn> are different. This is similar to object-oriented
  programming languages where both scalar and structured types use the same
  class inheritance mechanism, even though scalar types and structured types are
  inherently different.</p>

<div class="example"><div class="example-title"><span>Example 25</span>: Example demonstrating the context-sensitivity for @type</div><pre class="example">{
...
  &quot;@id&quot;: &quot;http://example.org/posts#TripToWestVirginia&quot;,
  <span class="diff">&quot;@type&quot;: &quot;http://schema.org/BlogPosting&quot;</span>,
  &quot;modified&quot;:
  {
    &quot;@value&quot;: &quot;2010-05-29T14:17:39+02:00&quot;,
    <span class="diff">&quot;@type&quot;: &quot;http://www.w3.org/2001/XMLSchema#dateTime&quot;</span>
  }
...
}</pre></div>

<p>The first use of <code>@type</code> associates a <a class="tref internalDFN" title="node_type" href="#dfn-node_type">node type</a>
  (<code>http://schema.org/BlogPosting</code>) with the <a class="tref internalDFN" title="node" href="#dfn-node">node</a>,
  which is expressed using the <code>@id</code> <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a>.
  The second use of <code>@type</code> associates a <a class="tref internalDFN" title="value_type" href="#dfn-value_type">value type</a>
  (<code>http://www.w3.org/2001/XMLSchema#dateTime</code>) with the
  value expressed using the <code>@value</code> <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a>. As a
  general rule, when <code>@value</code> and <code>@type</code> are used in
  the same <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a>, the <code>@type</code>
  <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a> is expressing a <a class="tref internalDFN" title="value_type" href="#dfn-value_type">value type</a>.
  Otherwise, the <code>@type</code> <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a> is expressing a
  <a class="tref internalDFN" title="node_type" href="#dfn-node_type">node type</a>.</p>

</section>

<section id="language-tagged-strings">
<h3><span class="secno">4.3 </span>Language-tagged Strings</h3>

<p>
  A string with an associated language, also known as a
  <dfn title="language-tagged_string" id="dfn-language-tagged_string">language-tagged string</dfn>, is indicated by associating a string with
  an language code as defined in [<cite><a class="bibref" href="#bib-BCP47">BCP47</a></cite>]. Language-tagged strings may be
  expressed in JSON-LD in four ways:
</p>

<ol>
  <li>By defining a global language using the <code>@language</code>
    <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a> within a <code>@context</code> section.</li>
  <li>By utilizing the <code>@language</code> <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a> when defining
    a <a class="tref internalDFN" title="term" href="#dfn-term">term</a> within a <code>@context</code> section.</li>
  <li>By utilizing the expanded form for specifying values.</li>
  <li>By utilizing the <code>@container</code> <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a> with a
  value of <code>@language</code> when defining a <a class="tref internalDFN" title="term" href="#dfn-term">term</a> within
  a <code>@context</code> section. This usage pattern is called a
  <dfn title="language_map" id="dfn-language_map">language map</dfn>.</li>
</ol>

<p>The first example uses the <code>@language</code> keyword to associate a
type with a particular <a class="tref internalDFN" title="term" href="#dfn-term">term</a> in the <code>@context</code>:</p>

<div class="example"><div class="example-title"><span>Example 26</span>: Expanded term definition with language coercion</div><pre class="example">{
  <span class="diff">&quot;@context&quot;:
  {
    &quot;title&quot;:
    {
      &quot;@id&quot;: &quot;http://purl.org/dc/terms/title&quot;,
      &quot;@language&quot;: &quot;en&quot;
    }
  },</span>
...
  &quot;title&quot;: &quot;JSON-LD Syntax&quot;,
...
}</pre></div>

<p>The <em>modified</em> key's value above is automatically
  language coerced to a English value because of the information specified in
  the <code>@context</code>.</p>

<p>The second example uses the expanded form of setting the language information
in the body of a JSON-LD document:</p>

<div class="example"><div class="example-title"><span>Example 27</span>: Expanded value with language</div><pre class="example">{
  &quot;@context&quot;:
  {
    &quot;title&quot;:
    {
      &quot;@id&quot;: &quot;http://purl.org/dc/terms/title&quot;
    }
  },
...
  &quot;title&quot;:
  <span class="diff">{
    &quot;@value&quot;: &quot;JSON-LD Syntax&quot;,
    &quot;@language&quot;: &quot;en&quot;
  }</span>
...
}</pre></div>

<p>Both examples above would generate the value <code>JSON-LD Syntax</code>
  tagged with the language <code>en</code>; which is the [<cite><a class="bibref" href="#bib-BCP47">BCP47</a></cite>] code
  for the English language.</p>

<p>Systems that support multiple languages often need to express data values in
each language. Typically, such systems also try to ensure that developers have
a programatically easy way to navigate the datastructures for the
language-specific data. In this case, <a class="tref internalDFN" title="language_map" href="#dfn-language_map">language map</a>s
may be utilized.</p>

<div class="example"><div class="example-title"><span>Example 28</span>: Language map expressing a property in three languages</div><pre class="example">{
  &quot;@context&quot;:
  {
    &quot;title&quot;:
    {
      &quot;@id&quot;: &quot;http://purl.org/dc/terms/title&quot;
      &quot;@container&quot;: &quot;@language&quot;
    }
  },
...
  &quot;title&quot;:
  <span class="diff">{
    &quot;en&quot;: &quot;JSON-LD Syntax&quot;,
    &quot;ru&quot;: &quot;JSON-LD Синтаксис&quot;,
    &quot;ja&quot;: &quot;JSON-LDの構文&quot;
  }</span>
...
}</pre></div>

<p>In the example above, the title is expressed in three languages; English,
  Russian, and Japanese. To access the data above in a programming language
  supporting dot-notation accessors for object properties, a developer may
  use the <code>property.language</code> pattern. For example, to access the
  Japanese version of the title, a developer would use the following code
  snippet: <code>obj.title.ja</code>.</p>
</section>

<section id="referencing-contexts-from-json-documents">
<h3><span class="secno">4.4 </span>Referencing Contexts from JSON Documents</h3>

<p>Ordinary JSON documents can be transformed into JSON-LD documents by referencing
to an external JSON-LD <a class="tref internalDFN" title="context" href="#dfn-context">context</a> in an HTTP Link Header. Doing this
allows JSON to be unambiguously machine-readable without requiring developers to
drastically change their workflow and provides an upgrade path for existing
infrastructure without breaking existing clients that rely on the <code>application/json</code>
media type.
</p>

<p>
In order to use an external context with an ordinary JSON document, an author
<em class="rfc2119" title="must">must</em> specify an <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> to a valid JSON-LD document in an HTTP Link
Header [<cite><a class="bibref" href="#bib-RFC5988">RFC5988</a></cite>] using the <code>describedby</code> link relation.

The referenced document <em class="rfc2119" title="must">must</em> have a top-level <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a>. The
<code>@context</code> subtree within that object is added to the top-level
<a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a> of the referencing document. If an <a class="tref internalDFN" title="array" href="#dfn-array">array</a> is at the top-level of the
referencing document and its items are <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definitions</a>, the <code>@context</code>
subtree is added to all <a class="tref internalDFN" title="array" href="#dfn-array">array</a> items. All extra information located outside
of the <code>@context</code> subtree in the referenced document <em class="rfc2119" title="must">must</em> be
discarded.
</p>

<p>The following example demonstrates the use of an external context with an
ordinary JSON document:</p>

<div class="example"><div class="example-title"><span>Example 29</span>: Specifing context through HTTP header</div><pre class="example">GET /ordinary-json-document.json HTTP/1.1
Host: example.com
Accept: application/ld+json,application/json,*/*;q=0.1

====================================

HTTP/1.0 200 OK
...
Content-Type: <span class="diff">application/json</span>
<span class="diff">Link: &lt;http://json-ld.org/contexts/person.jsonld&gt;; rel=&quot;describedby&quot;; type=&quot;application/ld+json&quot;</span>

{
  &quot;name&quot;: &quot;Markus Lanthaler&quot;,
  &quot;homepage&quot;: &quot;http://www.markus-lanthaler.com/&quot;,
  &quot;depiction&quot;: &quot;http://twitter.com/account/profile_image/markuslanthaler&quot;
}</pre></div>

<div class="note"><div class="note-title"><span>Note</span></div><p class="">JSON-LD documents served with the <code>application/ld+json</code> media type
  <em class="rfc2119" title="must">must</em> have all context information, including references to external contexts, within the
  body of the document.</p></div>
</section>

<section id="expanded-term-definition">
<h3><span class="secno">4.5 </span>Expanded Term Definition</h3>

<p>Within a <a class="tref internalDFN" title="context" href="#dfn-context">context</a> definition, <a class="tref internalDFN" title="term" href="#dfn-term">term</a>s <em class="rfc2119" title="may">may</em> be
   defined using an expanded notation to allow for additional information
   associated with the <a class="tref internalDFN" title="term" href="#dfn-term">term</a> to be specified (see also
   <a href="#type-coercion" class="sec-ref"><span class="secno">4.6</span> <span class="sec-title">Type Coercion</span></a> and
   <a href="#sets-and-lists" class="sec-ref"><span class="secno">4.9</span> <span class="sec-title">Sets and Lists</span></a>).</p>

<p>Instead of using a string representation of an <abbr title="Internationalized Resource Identifier">IRI</abbr>, the <abbr title="Internationalized Resource Identifier">IRI</abbr> <em class="rfc2119" title="may">may</em> be
specified using a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> having an <code>@id</code> key.
The value of the <code>@id</code> key <em class="rfc2119" title="must">must</em> be either a <a class="tref internalDFN" title="term" href="#dfn-term">term</a>, a
<a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></a>, or an <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></a>. Such
an object is called a <a class="tref internalDFN" title="node_reference" href="#dfn-node_reference">node reference</a>.</p>

<div class="example"><div class="example-title"><span>Example 30</span>: Expanded term definition</div><pre class="example">{
  &quot;@context&quot;:
  {
    &quot;foaf&quot;: <span class="diff">{ &quot;@id&quot;: &quot;http://xmlns.com/foaf/0.1/&quot; }</span>,
    &quot;name&quot;: <span class="diff">{ &quot;@id&quot;: &quot;http://xmlns.com/foaf/0.1/name&quot; }</span>,
    &quot;homepage&quot;: <span class="diff">{ &quot;@id&quot;: &quot;foaf:homepage&quot; }</span>,
    &quot;depiction&quot;: <span class="diff">{ &quot;@id&quot;: &quot;foaf:depiction&quot; }</span>
  },
  &quot;name&quot;: &quot;Manu Sporny&quot;,
  &quot;homepage&quot;: &quot;http://manu.sporny.org/&quot;,
  &quot;depiction&quot;: &quot;http://twitter.com/account/profile_image/manusporny&quot;
}</pre></div>

<p>This allows additional information to be associated with the term. This
  <em class="rfc2119" title="may">may</em> be used for <a href="#type-coercion" class="sec-ref"><span class="secno">4.6</span> <span class="sec-title">Type Coercion</span></a>,
  <a href="#sets-and-lists" class="sec-ref"><span class="secno">4.9</span> <span class="sec-title">Sets and Lists</span></a>), or to associate language
  information with a <a class="tref internalDFN" title="term" href="#dfn-term">term</a> as shown in the following example:</p>

<div class="example"><div class="example-title"><span>Example 31</span>: Expanded term definition with language</div><pre class="example">{
  &quot;@context&quot;: {
    ...
    &quot;ex&quot;: &quot;http://example.com/&quot;,
    &quot;@language&quot;: &quot;ja&quot;,
    &quot;name&quot;: { &quot;@id&quot;: &quot;ex:name&quot;, <span class="diff">&quot;@language&quot;: null</span> },
    &quot;occupation&quot;: { &quot;@id&quot;: &quot;ex:occupation&quot; },
    &quot;occupation_en&quot;: { &quot;@id&quot;: &quot;ex:occupation&quot;, <span class="diff">&quot;@language&quot;: &quot;en&quot;</span> },
    &quot;occupation_cs&quot;: { &quot;@id&quot;: &quot;ex:occupation&quot;, <span class="diff">&quot;@language&quot;: &quot;cs&quot;</span> }
  },
  <span class="diff">&quot;name&quot;: &quot;Yagyū Muneyoshi&quot;,
  &quot;occupation&quot;: &quot;忍者&quot;,
  &quot;occupation_en&quot;: &quot;Ninja&quot;,
  &quot;occupation_cs&quot;: &quot;Nindža&quot;,</span>
  ...
}</pre></div>

<p>The example above would associate <em>忍者</em> with the specified default
  language code <code>ja</code>, <em>Ninja</em> with the language code
  <code>en</code>, and <em>Nindža</em> with the language code <code>cs</code>.
  The value of <code>name</code>, <em>Yagyū Muneyoshi</em> wouldn't be
  associated with any language code since <code>@language</code> was reset to
  <a class="tref internalDFN" title="null" href="#dfn-null">null</a> in the expanded term definition.</p>

<p>Expanded terms <em class="rfc2119" title="may">may</em> also be defined using <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact IRIs</a> or
  <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute IRIs</a> as keys. If the definition does not include an
  <code>@id</code> key, the expanded <abbr title="Internationalized Resource Identifier">IRI</abbr> is determined by performing expansion of the key
  within the current active context. This mechanism is mainly used to associate type or language
  information with a <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></a> or an <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></a>.</p>

<div class="note"><div class="note-title"><span>Note</span></div><p class="">While it is possible to define a
  <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></a>, or an absolute <abbr title="Internationalized Resource Identifier">IRI</abbr> to expand to some
  other unrelated <abbr title="Internationalized Resource Identifier">IRI</abbr> (for example, <code>foaf:name</code> expanding to
  <code>http://example.org/unrelated#species</code>),
  such usage is strongly discouraged.</p></div>
</section>

<section id="type-coercion">
<h3><span class="secno">4.6 </span>Type Coercion</h3>

<p>JSON-LD supports the coercion of values to particular data types.
Type <dfn title="coercion" id="dfn-coercion">coercion</dfn> allows someone deploying JSON-LD to coerce the incoming or
outgoing values to the proper data type based on a mapping of data type <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>s to
<a class="tref internalDFN" title="term" href="#dfn-term">term</a>s. Using type coercion, value representation is preserved without requiring
the data type to be specified with each piece of data.</p>

<p>Type coercion is specified within an <a href="#expanded-term-definition" class="sec-ref"><span class="secno">4.5</span> <span class="sec-title">Expanded Term Definition</span></a>
  using the <code>@type</code> key. The value of this key represents a type <abbr title="Internationalized Resource Identifier">IRI</abbr> and <em class="rfc2119" title="must">must</em> take the form of
  a <a class="tref internalDFN" title="term" href="#dfn-term">term</a>, <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></a>, <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></a>, or the <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a> <code>@id</code>. Specifying
  <code>@id</code> indicates that within the body of a JSON-LD document, a string value of a <a class="tref internalDFN" title="term" href="#dfn-term">term</a> coerced to
  <code>@id</code> is to be interpreted as an <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>.</p>

<p><a class="tref internalDFN" title="term" href="#dfn-term">Terms</a> or <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact IRIs</a> used as the value of a
  <code>@type</code> key <em class="rfc2119" title="may">may</em> be defined within the same context. This means that one may specify a
  <a class="tref internalDFN" title="term" href="#dfn-term">term</a> like <code>xsd</code> and then use <code>xsd:integer</code> within the same
  context definition - the JSON-LD processor will be able to determine the proper expansion for
  <code>xsd:integer</code>.</p>

<p>The example below demonstrates how a JSON-LD author can coerce values to
<a class="tref internalDFN" title="typed_value" href="#dfn-typed_value">typed value</a>s, IRIs and lists.</p>

<div class="example"><div class="example-title"><span>Example 32</span>: Expanded term definition with types</div><pre class="example">{
  &quot;@context&quot;:
  {
    &quot;xsd&quot;: &quot;http://www.w3.org/2001/XMLSchema#&quot;,
    &quot;name&quot;: &quot;http://xmlns.com/foaf/0.1/name&quot;,
    &quot;age&quot;:
    <span class="diff">{
      &quot;@id&quot;: &quot;http://xmlns.com/foaf/0.1/age&quot;,
      &quot;@type&quot;: &quot;xsd:integer&quot;
    }</span>,
    &quot;homepage&quot;:
    <span class="diff">{
      &quot;@id&quot;: &quot;http://xmlns.com/foaf/0.1/homepage&quot;,
      &quot;@type&quot;: &quot;@id&quot;,
      &quot;@container&quot;: &quot;@list&quot;
    }</span>
  },
  &quot;name&quot;: &quot;John Smith&quot;,
  &quot;age&quot;: <span class="diff">&quot;41&quot;</span>,
  &quot;homepage&quot;:
  <span class="diff">[
    &quot;http://personal.example.org/&quot;,
    &quot;http://work.example.com/jsmith/&quot;
  ]</span>
}</pre></div>

<p>The example above would generate the following Turtle:</p>

<div class="example"><div class="example-title"><span>Example 33</span></div><pre class="example">@prefix xsd: &lt;http://www.w3.org/2001/XMLSchema#&gt; .

[ foaf:name &quot;John Smith&quot;;
  foaf:age  &quot;41&quot;^^xsd:integer;
  foaf:homepage ( &lt;http://personal.example.org/&gt; &lt;http://work.example.com/jsmith/&gt; )
] .</pre></div>

<p>Terms may also be defined using <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute IRIs</a> or <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact IRIs</a>.
  This allows coercion rules to be applied to keys which are not represented as a simple <a class="tref internalDFN" title="term" href="#dfn-term">term</a>.
  For example:</p>

<div class="example"><div class="example-title"><span>Example 34</span>: Term definition with absolute IRI</div><pre class="example">{
  &quot;@context&quot;:
  {
    <span class="diff">&quot;foaf&quot;: &quot;http://xmlns.com/foaf/0.1/&quot;</span>,
    &quot;<span class="diff">foaf:age</span>&quot;:
    {
      &quot;@type&quot;: &quot;xsd:integer&quot;
    },
    &quot;<span class="diff">foaf:homepage</span>&quot;:
    <span class="diff">{
      &quot;@type&quot;: &quot;@id&quot;
    }</span>
  },
  &quot;foaf:name&quot;: &quot;John Smith&quot;,
  &quot;foaf:age&quot;: <span class="diff">&quot;41&quot;</span>,
  &quot;foaf:homepage&quot;:
  <span class="diff">[
    &quot;http://personal.example.org/&quot;,
    &quot;http://work.example.com/jsmith/&quot;
  ]</span>
}</pre></div>

<p>In this case the <code>@id</code> definition is optional, but if it does exist, the <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></a>
  or <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> is treated as a <a class="tref internalDFN" title="term" href="#dfn-term">term</a> (not a <code>prefix:suffix</code> construct)
  so that the actual definition of a <a class="tref internalDFN" title="prefix" href="#dfn-prefix">prefix</a> becomes unnecessary.</p>

<div class="note"><div class="note-title"><span>Note</span></div><p class="">Keys in the context are treated as <a class="tref internalDFN" title="term" href="#dfn-term">terms</a> for the purpose of
  expansion and value coercion. At times, this may result in multiple representations for the same expanded <abbr title="Internationalized Resource Identifier">IRI</abbr>.
  For example, one could specify that <code>dog</code> and <code>cat</code> both expanded to <code>http://example.com/vocab#animal</code>.
  Doing this could be useful for establishing different type coercion or language specification rules. It also allows a <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></a> (or even an
  absolute <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>) to be defined as something else entirely. For example, one could specify that
  the <a class="tref internalDFN" title="term" href="#dfn-term">term</a> <code>http://example.org/zoo</code> should expand to
  <code>http://example.org/river</code>, but this usage is discouraged because it would lead to a
  great deal of confusion among developers attempting to understand the JSON-LD document.</p></div>

<p>Type coercion is performed using the unexpanded value of the key,
  which <em class="rfc2119" title="must">must</em> have an exact match for an entry in the
  <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a>.</p>

</section>


<section id="property-generators">
<h3><span class="secno">4.7 </span>Property Generators</h3>

<p>At times, an author may find that they need to express the same value for
multiple properties. The simplest approach to accomplish this goal would be
to do the following:</p>

<div class="example"><div class="example-title"><span>Example 35</span>: Verbose expression of multiple properties with the same value</div><pre class="example">{
  &quot;@context&quot;:
  {
    <span class="diff">&quot;title1&quot;: &quot;http://purl.org/dc/terms/title&quot;</span>,
    <span class="diff">&quot;title2&quot;: &quot;http://schema.org/name&quot;</span>,
    <span class="diff">&quot;title3&quot;: &quot;http://www.w3.org/2000/01/rdf-schema#label&quot;</span>
  },
  &quot;@id&quot;: &quot;http://example.com/book&quot;,
  <span class="diff">&quot;title1&quot;: &quot;The Count of Monte Cristo&quot;</span>,
  <span class="diff">&quot;title2&quot;: &quot;The Count of Monte Cristo&quot;</span>,
  <span class="diff">&quot;title3&quot;: &quot;The Count of Monte Cristo&quot;</span>
}</pre></div>

<p>Unfortunately, the approach above produces redundant data and would become a
publishing burden for large data sets.
In these situations, the author may use
a <dfn title="property_generator" id="dfn-property_generator">property generator</dfn> to express a <a class="tref internalDFN" title="term" href="#dfn-term">term</a> once, but have
the JSON-LD processor expand the single statement into multiple statements.
This method can be accomplished by using the following markup pattern:</p>

<div class="example"><div class="example-title"><span>Example 36</span>: Generating multiple properties using a single term</div><pre class="example">{
  &quot;@context&quot;:
  {
    <span class="diff">&quot;title&quot;: { &quot;@id&quot;: [&quot;http://purl.org/dc/terms/title&quot;,
                       &quot;http://schema.org/name&quot;,
                       &quot;http://www.w3.org/2000/01/rdf-schema#label&quot;] }</span>,
  },
  &quot;@id&quot;: &quot;http://example.com/book&quot;,
  <span class="diff">&quot;title&quot;: &quot;The Count of Monte Cristo&quot;</span>
}</pre></div>

<p>While the term above is only used once outside of the <code>@context</code>,
a JSON-LD processor will internally transform the document above into
the following set of statements:</p>

<div class="example"><div class="example-title"><span>Example 37</span></div><pre class="example">&lt;http://example.com/book&gt;
  &lt;http://purl.org/dc/terms/title&gt;
    &quot;The Count of Monte Cristo&quot; .
&lt;http://example.com/book&gt;
  &lt;http://schema.org/name&gt;
    &quot;The Count of Monte Cristo&quot; .
&lt;http://example.com/book&gt;
  &lt;http://www.w3.org/2000/01/rdf-schema#label&gt;
    &quot;The Count of Monte Cristo&quot; .</pre></div>

</section>

<section id="iri-expansion-within-a-context">
  <h3><span class="secno">4.8 </span><abbr title="Internationalized Resource Identifier">IRI</abbr> Expansion Within a Context</h3>
  <p>In general, normal <abbr title="Internationalized Resource Identifier">IRI</abbr> expansion rules apply
    anywhere an <abbr title="Internationalized Resource Identifier">IRI</abbr> is expected (see <a href="#iris" class="sec-ref"><span class="secno">3.5</span> <span class="sec-title">IRIs</span></a>). Within
    a <a class="tref internalDFN" title="context" href="#dfn-context">context</a> definition, this can mean that terms defined
    within the context <em class="rfc2119" title="may">may</em> also be used within that context as long as
    there are no circular dependencies. For example, it is common to use
    the <code>xsd</code> namespace when defining <a class="tref internalDFN" title="typed_value" href="#dfn-typed_value">typed value</a>s:</p>
<div class="example"><div class="example-title"><span>Example 38</span>: IRI expansion within context</div><pre class="example">{
  &quot;@context&quot;:
  {
    <span class="diff">&quot;xsd&quot;: &quot;http://www.w3.org/2001/XMLSchema#&quot;</span>,
    &quot;name&quot;: &quot;http://xmlns.com/foaf/0.1/name&quot;,
    &quot;age&quot;:
    {
      &quot;@id&quot;: &quot;http://xmlns.com/foaf/0.1/age&quot;,
      &quot;@type&quot;: <span class="diff">&quot;xsd:integer&quot;</span>
    },
    &quot;homepage&quot;:
    {
      &quot;@id&quot;: &quot;http://xmlns.com/foaf/0.1/homepage&quot;,
      &quot;@type&quot;: &quot;@id&quot;
    }
  },
  ...
}</pre></div>
<p>In this example, the <code>xsd</code> <a class="tref internalDFN" title="term" href="#dfn-term">term</a> is defined
  and used as a <a class="tref internalDFN" title="prefix" href="#dfn-prefix">prefix</a> for the <code>@type</code> coercion
  of the <code>age</code> property.</p>

<p><a class="tref internalDFN" title="term" href="#dfn-term">Term</a>s <em class="rfc2119" title="may">may</em> also be used when defining the <abbr title="Internationalized Resource Identifier">IRI</abbr> of another
<a class="tref internalDFN" title="term" href="#dfn-term">term</a>:</p>

<div class="example"><div class="example-title"><span>Example 39</span></div><pre class="example">{
  &quot;@context&quot;:
  {
    <span class="diff">&quot;foaf&quot;: &quot;http://xmlns.com/foaf/0.1/&quot;</span>,
    &quot;xsd&quot;: &quot;http://www.w3.org/2001/XMLSchema#&quot;,
    &quot;name&quot;: <span class="diff">&quot;foaf:name&quot;</span>,
    &quot;age&quot;:
    {
      &quot;@id&quot;: <span class="diff">&quot;foaf:age&quot;</span>,
      &quot;@type&quot;: &quot;xsd:integer&quot;
    },
    &quot;homepage&quot;:
    {
      &quot;@id&quot;: <span class="diff">&quot;foaf:homepage&quot;</span>,
      &quot;@type&quot;: &quot;@id&quot;
    }
  },
  ...
}</pre></div>

<p><a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">Compact IRIs</a>
  and <a class="tref internalDFN" title="iri" href="#dfn-iri">IRIs</a> <em class="rfc2119" title="may">may</em> be used on the left-hand side of a
  <a class="tref internalDFN" title="term" href="#dfn-term">term</a> definition.</p>

<div class="example"><div class="example-title"><span>Example 40</span></div><pre class="example">{
  &quot;@context&quot;:
  {
    <span class="diff">&quot;foaf&quot;: &quot;http://xmlns.com/foaf/0.1/&quot;</span>,
    &quot;xsd&quot;: &quot;http://www.w3.org/2001/XMLSchema#&quot;,
    &quot;name&quot;: &quot;foaf:name&quot;,
    &quot;<span class="diff">foaf:age</span>&quot;:
    {
      &quot;@type&quot;: &quot;xsd:integer&quot;
    },
    &quot;<span class="diff">foaf:homepage</span>&quot;:
    <span class="diff">{
      &quot;@type&quot;: &quot;@id&quot;
    }</span>
  },
  ...
}</pre></div>

<p>
In this example, the <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></a> form is used in two different
ways.
In the first approach, <code>foaf:age</code> declares both the
<a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> for the <a class="tref internalDFN" title="term" href="#dfn-term">term</a> (using short-form) as well as the
<code>@type</code> associated with the <a class="tref internalDFN" title="term" href="#dfn-term">term</a>. In the second
approach, only the <code>@type</code> associated with the <a class="tref internalDFN" title="term" href="#dfn-term">term</a> is
specified. The JSON-LD processor will derive the full <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> for
<code>foaf:homepage</code> by looking up the <code>foaf</code>
<a class="tref internalDFN" title="prefix" href="#dfn-prefix">prefix</a> in the
<a class="tref internalDFN" title="context" href="#dfn-context">context</a>.
</p>

<p>
<a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">Absolute IRIs</a> <em class="rfc2119" title="may">may</em> also be used in the key position in a <a class="tref internalDFN" title="context" href="#dfn-context">context</a>:
</p>

<div class="example"><div class="example-title"><span>Example 41</span></div><pre class="example">{
  &quot;@context&quot;:
  {
    &quot;foaf&quot;: &quot;http://xmlns.com/foaf/0.1/&quot;,
    &quot;xsd&quot;: &quot;http://www.w3.org/2001/XMLSchema#&quot;,
    &quot;name&quot;: &quot;foaf:name&quot;,
    &quot;foaf:age&quot;:
    {
      &quot;@id&quot;: &quot;foaf:age&quot;,
      &quot;@type&quot;: &quot;xsd:integer&quot;
    },
    &quot;<span class="diff">http://xmlns.com/foaf/0.1/homepage</span>&quot;:
    {
      &quot;@type&quot;: &quot;@id&quot;
    }
  },
  ...
}</pre></div>

<p>
In order for the <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></a> to match above, the <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></a> <em class="rfc2119" title="must">must</em> also
be used in the JSON-LD document. Also note that <code>foaf:homepage</code>
will not use the <code>{ &quot;@type&quot;: &quot;@id&quot; }</code> declaration because
<code>foaf:homepage</code> is not the same as
<code>http://xmlns.com/foaf/0.1/homepage</code>. That is, a JSON-LD
processor will use direct string comparison when looking up
<a class="tref internalDFN" title="term" href="#dfn-term">term</a>s in a <a class="tref internalDFN" title="context" href="#dfn-context">context</a> before it applies the
<a class="tref internalDFN" title="prefix" href="#dfn-prefix">prefix</a> lookup mechanism.
</p>

<p>The only exception for using terms in the <a class="tref internalDFN" title="context" href="#dfn-context">context</a> is that
  they <em class="rfc2119" title="must not">must not</em> be used in a circular manner. That is,
  a definition of <em>term-1</em> <em class="rfc2119" title="must not">must not</em> depend on the
  definition of <em>term-2</em> if <em>term-2</em> also depends on
  <em>term-1</em>. For example, the following <a class="tref internalDFN" title="context" href="#dfn-context">context</a> definition
  is illegal:</p>
<div class="example"><div class="example-title"><span>Example 42</span></div><pre class="example">{
  &quot;@context&quot;:
  {
    <span class="diff">&quot;term1&quot;: &quot;term2:foo&quot;,
    &quot;term2&quot;: &quot;term1:bar&quot;</span>
  },
  ...
}</pre></div>
</section>

<section id="sets-and-lists">
<h3><span class="secno">4.9 </span>Sets and Lists</h3>

<p>A JSON-LD author can express multiple values in a compact way by using
  <a class="tref internalDFN" title="array" href="#dfn-array">array</a>s. Since graphs do not describe ordering for links
  between nodes, arrays in JSON-LD do not provide an ordering of the
  contained elements by default. This is exactly the opposite from regular JSON
  arrays, which are ordered by default. For example, consider the following
  simple document:</p>

<div class="example"><div class="example-title"><span>Example 43</span></div><pre class="example">{
...
  &quot;@id&quot;: &quot;http://example.org/people#joebob&quot;,
  &quot;nick&quot;: <span class="diff">[ &quot;joe&quot;, &quot;bob&quot;, &quot;jaybee&quot; ]</span>,
...
}</pre></div>

<p>The markup shown above would result in three triples being generated,
  each relating the node to an individual value, with no inherent order:</p>

<div class="issue"><div class="issue-title"><span>Issue</span></div><p class="">Including an illustration might be better.</p></div>

<div class="example"><div class="example-title"><span>Example 44</span></div><pre class="example">&lt;http://example.org/people#joebob&gt; &lt;http://xmlns.com/foaf/0.1/nick&gt; &quot;joe&quot; .
&lt;http://example.org/people#joebob&gt; &lt;http://xmlns.com/foaf/0.1/nick&gt; &quot;bob&quot; .
&lt;http://example.org/people#joebob&gt; &lt;http://xmlns.com/foaf/0.1/nick&gt; &quot;jaybee&quot; .</pre></div>

<p>Multiple values may also be expressed using the expanded form:</p>

<div class="example"><div class="example-title"><span>Example 45</span></div><pre class="example">{
  &quot;@id&quot;: &quot;http://example.org/articles/8&quot;,
  &quot;dc:title&quot;: <span class="diff">
  [
    {
      &quot;@value&quot;: &quot;Das Kapital&quot;,
      &quot;@language&quot;: &quot;de&quot;
    },
    {
      &quot;@value&quot;: &quot;Capital&quot;,
      &quot;@language&quot;: &quot;en&quot;
    }
  ]</span>
}</pre></div>

<p>The markup shown above would generate the following triples, again with
  no inherent order:</p>

<div class="issue"><div class="issue-title"><span>Issue</span></div><p class="">Including an illustration might be better.</p></div>

<div class="example"><div class="example-title"><span>Example 46</span></div><pre class="example">&lt;http://example.org/articles/8&gt; &lt;http://purl.org/dc/terms/title&gt; &quot;Das Kapital&quot;@de .
&lt;http://example.org/articles/8&gt; &lt;http://purl.org/dc/terms/title&gt; &quot;Capital&quot;@en .</pre></div>


<p>As the notion of ordered collections is rather important in data
  modeling, it is useful to have specific language support. In JSON-LD,
  a list may be represented using the <code>@list</code> <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a> as follows:</p>
<div class="example"><div class="example-title"><span>Example 47</span></div><pre class="example">{
...
  &quot;@id&quot;: &quot;http://example.org/people#joebob&quot;,
  &quot;foaf:nick&quot;:
  <span class="diff">{
    &quot;@list&quot;: [ &quot;joe&quot;, &quot;bob&quot;, &quot;jaybee&quot; ]
  }</span>,
...
}</pre></div>

<p>This describes the use of this <a class="tref internalDFN" title="array" href="#dfn-array">array</a> as being ordered,
  and order is maintained when processing a document. If every use of a given multi-valued
  property is a list, this may be abbreviated by setting <code>@container</code>
  to <code>@list</code> in the <a class="tref internalDFN" title="context" href="#dfn-context">context</a>:</p>
<div class="example"><div class="example-title"><span>Example 48</span></div><pre class="example">{
  <span class="diff">&quot;@context&quot;:
  {
    ...
    &quot;nick&quot;:
    {
      &quot;@id&quot;: &quot;http://xmlns.com/foaf/0.1/nick&quot;,
      &quot;@container&quot;: &quot;@list&quot;
    }
  }</span>,
...
  &quot;@id&quot;: &quot;http://example.org/people#joebob&quot;,
  &quot;nick&quot;: <span class="diff">[ &quot;joe&quot;, &quot;bob&quot;, &quot;jaybee&quot; ]</span>,
...
}</pre></div>

<div class="note"><div class="note-title"><span>Note</span></div><p class="">List of lists are not allowed in this version of JSON-LD.
  If a list of lists is detected, a JSON-LD processor will throw an exception.
  This decision was made due to the extreme amount of added complexity when
  processing lists of lists.</p></div>

<p>Similarly to <code>@list</code>, there exists the <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a> <code>@set</code> to
  describe unordered sets. While its use in the body of a JSON-LD document
  represents just syntactic sugar that <em class="rfc2119" title="must">must</em> be optimized away when processing
  the document, it is very helpful when used within the context of a document.
  Values of terms associated with a <code>@set</code> or <code>@list</code> container
  are always represented in the form of an <a class="tref internalDFN" title="array" href="#dfn-array">array</a> - even if there is just a
  single value that would otherwise be optimized to a non-array form in a
  <a href="#compact-document-form" class="sec-ref"><span class="secno">4.15</span> <span class="sec-title">Compact Document Form</span></a>. This makes post-processing of
  the data easier as the data is always in array form, even if the array only
  contains a single value.</p>

<div class="note"><div class="note-title"><span>Note</span></div><p class="">The use of <code>@container</code> in the body of a JSON-LD
  document, i.e., outside <code>@context</code> <em class="rfc2119" title="must">must</em> be ignored by
  JSON-LD processors.</p></div>

</section>

<section id="embedding">
  <h3><span class="secno">4.10 </span>Embedding</h3>

  <p><dfn title="embedding" id="dfn-embedding">Embedding</dfn> is a JSON-LD feature that allows an author to
    use <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definitions</a> as
    <a class="tref internalDFN" title="property" href="#dfn-property">property</a> values. This is a commonly used mechanism for
    creating a parent-child relationship between two <a class="tref internalDFN" title="node" href="#dfn-node">node</a>s.</p>

  <p>The example shows two nodes related by a property from the first node:</p>

  <div class="example"><div class="example-title"><span>Example 49</span></div><pre class="example">{
...
  &quot;name&quot;: &quot;Manu Sporny&quot;,
  &quot;<span class="diff">knows</span>&quot;:
  {
    &quot;<span class="diff">@type</span>&quot;: &quot;<span class="diff">Person</span>&quot;,
    &quot;<span class="diff">name</span>&quot;: &quot;<span class="diff">Gregg Kellogg</span>&quot;,
  }
...
}</pre></div>

  <p>
    A <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a>, like the one used above, <em class="rfc2119" title="may">may</em> be used in
    any value position in the body of a JSON-LD document.</p>
</section>

<section id="named-graphs">
  <h3><span class="secno">4.11 </span>Named Graphs</h3>
  <p>The <code>@graph</code> <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a> is used to express a set of
    JSON-LD <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a>s that may not be directly related
    to one another through a property. The mechanism may also be used where
    <a class="tref internalDFN" title="embedding" href="#dfn-embedding">embedding</a> is not desirable to the application. For example:</p>

  <div class="example"><div class="example-title"><span>Example 50</span></div><pre class="example">{
  &quot;@context&quot;: ...,
  &quot;<span class="diff">@graph</span>&quot;:
  [
    {
      &quot;@id&quot;: &quot;http://manu.sporny.org/i/public&quot;,
      &quot;@type&quot;: &quot;foaf:Person&quot;,
      &quot;name&quot;: &quot;Manu Sporny&quot;,
      &quot;knows&quot;: &quot;http://greggkellogg.net/foaf#me&quot;
    },
    {
      &quot;@id&quot;: &quot;http://greggkellogg.net/foaf#me&quot;,
      &quot;@type&quot;: &quot;foaf:Person&quot;,
      &quot;name&quot;: &quot;Gregg Kellogg&quot;,
      &quot;knows&quot;: &quot;http://manu.sporny.org/i/public&quot;
    }
  ]
}</pre></div>

  <p>In this case, embedding doesn't work as each
    <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a> references the other. Using the
    <code>@graph</code> <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a> allows multiple resources to be
    defined within an <a class="tref internalDFN" title="array" href="#dfn-array">array</a>, and allows the use of a shared
    <a class="tref internalDFN" title="context" href="#dfn-context">context</a>. When used in a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> that is not otherwise
    a <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a>, this describes resources in the <em>default graph</em>.
    This is equivalent to using multiple <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definitions</a> in array and defining
    the <code>@context</code> within each <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a>:</p>

  <div class="example"><div class="example-title"><span>Example 51</span></div><pre class="example"><span class="diff">[</span>
  {
    <span class="diff">&quot;@context&quot;: ...,</span>
    &quot;@id&quot;: &quot;http://manu.sporny.org/i/public&quot;,
    &quot;@type&quot;: &quot;foaf:Person&quot;,
    &quot;name&quot;: &quot;Manu Sporny&quot;,
    &quot;knows&quot;: &quot;http://greggkellogg.net/foaf#me&quot;
  },
  {
    <span class="diff">&quot;@context&quot;: ...,</span>
    &quot;@id&quot;: &quot;http://greggkellogg.net/foaf#me&quot;,
    &quot;@type&quot;: &quot;foaf:Person&quot;,
    &quot;name&quot;: &quot;Gregg Kellogg&quot;,
    &quot;knows&quot;: &quot;http://manu.sporny.org/i/public&quot;
  }
<span class="diff">]</span></pre></div>

  <p>JSON-LD allows you to <em>name</em> things on the Web by assigning
    an <code>@id</code> to them, which is typically an <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>.
    This notion extends to the ability to identify graphs in the same
    manner. A developer may name data expressed using the <code>@graph</code>
    <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a> by pairing it with an <code>@id</code>
    <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a>. This enables the developer to make statements
    about a <a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">linked data graph</a> itself,
    rather than just a single <a class="tref internalDFN" title="node" href="#dfn-node">node</a>.</p>

  <div class="example"><div class="example-title"><span>Example 52</span></div><pre class="example">{
  &quot;@context&quot;: ...,
  <span class="diff">&quot;@id&quot;: &quot;http://example.org/graphs/73&quot;,
  &quot;asOf&quot;: { &quot;@value&quot;: &quot;2012-04-09&quot;, &quot;@type&quot;: &quot;xsd:date&quot; },
  &quot;@graph&quot;:</span>
  [
    {
      &quot;@id&quot;: &quot;http://manu.sporny.org/i/public&quot;,
      &quot;@type&quot;: &quot;foaf:Person&quot;,
      &quot;name&quot;: &quot;Manu Sporny&quot;,
      &quot;knows&quot;: &quot;http://greggkellogg.net/foaf#me&quot;
    },
    {
      &quot;@id&quot;: &quot;http://greggkellogg.net/foaf#me&quot;,
      &quot;@type&quot;: &quot;foaf:Person&quot;,
      &quot;name&quot;: &quot;Gregg Kellogg&quot;,
      &quot;knows&quot;: &quot;http://manu.sporny.org/i/public&quot;
    }
  ]
}</pre></div>

  <p>The example above expresses a <em>named</em>
    <a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">linked data graph</a> that is identified by the <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>
    <code>http://example.org/graphs/73</code>. That graph is composed of the
    statements about Manu and Gregg. Meta-data about the graph itself is also
    expressed via the <code>asOf</code> property, which specifies when the
    information was retrieved from the Web.</p>

  <div class="issue"><div class="issue-title"><span>Issue</span></div><p class="">These examples could all have TriG definitions of their RDF results,
    but that would involve adding RDF earlier in the document.</p></div>

</section>

<section id="identifying-unlabeled-nodes">
<h3><span class="secno">4.12 </span>Identifying Unlabeled Nodes</h3>

<p>At times, it becomes necessary to be able to express information without
being able to specify the node. Typically, this type of node is called
an <dfn title="unlabeled_node" id="dfn-unlabeled_node">unlabeled node</dfn> or a <dfn title="blank_node" id="dfn-blank_node">blank node</dfn> (see [<cite><a class="bibref" href="#bib-RDF-CONCEPTS">RDF-CONCEPTS</a></cite>] <cite><a href="http://www.w3.org/TR/rdf11-concepts/#section-blank-nodes">Section 3.4: Blank Nodes</a></cite>).
In JSON-LD, <a class="tref internalDFN" title="unlabeled_node" href="#dfn-unlabeled_node">unlabeled node</a> identifiers are
automatically created if a node is not specified using the
<code>@id</code> <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a>. However, authors may provide identifiers for
<a class="tref internalDFN" title="unlabeled_node" href="#dfn-unlabeled_node">unlabeled nodes</a> by using the special <code>_</code> (underscore)
<a class="tref internalDFN" title="prefix" href="#dfn-prefix">prefix</a>. This allows one to reference the node locally within the
document, but makes it impossible to reference the node from an
external document. The <a class="tref internalDFN" title="unlabeled_node" href="#dfn-unlabeled_node">unlabeled node</a> identifier is scoped to the
document in which it is used.</p>

<div class="example"><div class="example-title"><span>Example 53</span></div><pre class="example">{
...
  &quot;@id&quot;: &quot;<span class="diff">_:foo</span>&quot;,
...
}</pre></div>

<p>The example above would set the node to <code>_:foo</code>, which can
then be used elsewhere in the JSON-LD document to refer back to the
<a class="tref internalDFN" title="unlabeled_node" href="#dfn-unlabeled_node">unlabeled node</a>. If a developer finds that they refer to the unlabeled
node more than once, they should consider naming the node using a de-referenceable
<a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> so that it can be referenced also from other documents.
</p>

</section>

<section id="aliasing-keywords">
<h3><span class="secno">4.13 </span>Aliasing Keywords</h3>

<p>Each of the JSON-LD <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keywords</a>,
except for <code>@context</code>, <em class="rfc2119" title="may">may</em> be aliased to application-specific
keywords. This feature allows legacy JSON content to be utilized
by JSON-LD by re-using JSON keys that already exist in legacy documents.
This feature also allows developers to design domain-specific implementations
using only the JSON-LD <a class="tref internalDFN" title="context" href="#dfn-context">context</a>.</p>

<div class="example"><div class="example-title"><span>Example 54</span></div><pre class="example">{
  &quot;@context&quot;:
  {
     <span class="diff">&quot;url&quot;: &quot;@id&quot;</span>,
     <span class="diff">&quot;a&quot;: &quot;@type&quot;</span>,
     &quot;name&quot;: &quot;http://schema.org/name&quot;
  },
  &quot;<span class="diff">url</span>&quot;: &quot;http://example.com/about#gregg&quot;,
  &quot;<span class="diff">a</span>&quot;: &quot;http://schema.org/Person&quot;,
  &quot;name&quot;: &quot;Gregg Kellogg&quot;
}</pre></div>

<p>In the example above, the <code>@id</code> and <code>@type</code>
<a class="tref internalDFN" title="keyword" href="#dfn-keyword">keywords</a> have been given the aliases <strong>url</strong> and
<strong>a</strong>, respectively.
</p>

</section>

<section id="expanded-document-form">
<h3><span class="secno">4.14 </span>Expanded Document Form</h3>
<p>The JSON-LD API [<cite><a class="bibref" href="#bib-JSON-LD-API">JSON-LD-API</a></cite>] defines an method for <em>expanding</em> a
  JSON-LD document.
  Expansion is the process of taking a JSON-LD document and applying a
  <code>@context</code> such that all IRIs, types, and values
  are expanded so that the <code>@context</code> is no longer necessary.</p>

<p>For example, assume the following JSON-LD input document:</p>

<div class="example"><div class="example-title"><span>Example 55</span></div><pre class="example">{
   &quot;@context&quot;:
   {
      &quot;name&quot;: &quot;http://xmlns.com/foaf/0.1/name&quot;,
      &quot;homepage&quot;: {
        &quot;@id&quot;: &quot;http://xmlns.com/foaf/0.1/homepage&quot;,
        &quot;@type&quot;: &quot;@id&quot;
      }
   },
   &quot;name&quot;: &quot;Manu Sporny&quot;,
   &quot;homepage&quot;: &quot;http://manu.sporny.org/&quot;
}</pre></div>

<p>Running the JSON-LD Expansion algorithm against the JSON-LD input document
  provided above would result in the following output:</p>

<div class="example"><div class="example-title"><span>Example 56</span></div><pre class="example">[
  {
    &quot;http://xmlns.com/foaf/0.1/name&quot;: [
      { &quot;@value&quot;: &quot;Manu Sporny&quot; }
    ],
    &quot;http://xmlns.com/foaf/0.1/homepage&quot;: [
      { &quot;@id&quot;: &quot;http://manu.sporny.org/&quot; }
    ]
  }
]</pre></div>

<p>Expanded document form is useful when an application has to process input
data in a deterministic form. It has been optimized to ensure that the code
that developers have to write is minimized compared to the code that would
have to be written to operate on
<a href="#compact-document-form" class="sec-ref"><span class="secno">4.15</span> <span class="sec-title">Compact Document Form</span></a>.</p>

</section>

<section id="compact-document-form">
<h3><span class="secno">4.15 </span>Compact Document Form</h3>
<p>The JSON-LD API [<cite><a class="bibref" href="#bib-JSON-LD-API">JSON-LD-API</a></cite>] defines a method for <em>compacting</em> a JSON-LD document.
  Compaction is the process of taking a JSON-LD document and applying a
  context such that the most compact form of the document is generated. JSON
  is typically expressed in a very compact, key-value format. That is, full
  IRIs are rarely used as keys. At times, a JSON-LD document may be received
  that is not in its most compact form. JSON-LD, via the API, provides a way
  to compact a JSON-LD document.</p>

<p>For example, assume the following JSON-LD input document:</p>

<div class="example"><div class="example-title"><span>Example 57</span></div><pre class="example">[
  {
    &quot;http://xmlns.com/foaf/0.1/name&quot;: [ &quot;Manu Sporny&quot; ],
    &quot;http://xmlns.com/foaf/0.1/homepage&quot;: [
      {
       &quot;@id&quot;: &quot;http://manu.sporny.org/&quot;
      }
    ]
  }
]</pre></div>

<p>Additionally, assume the following developer-supplied JSON-LD context:</p>

<div class="example"><div class="example-title"><span>Example 58</span></div><pre class="example">{
  &quot;@context&quot;: {
    &quot;name&quot;: &quot;http://xmlns.com/foaf/0.1/name&quot;,
    &quot;homepage&quot;: {
      &quot;@id&quot;: &quot;http://xmlns.com/foaf/0.1/homepage&quot;,
      &quot;@type&quot;: &quot;@id&quot;
    }
  }
}</pre></div>

<p>Running the JSON-LD Compaction algorithm given the context supplied above
  against the JSON-LD input document provided above would result in the following
  output:</p>

<div class="example"><div class="example-title"><span>Example 59</span></div><pre class="example">{
  &quot;@context&quot;: {
    &quot;name&quot;: &quot;http://xmlns.com/foaf/0.1/name&quot;,
    &quot;homepage&quot;: {
      &quot;@id&quot;: &quot;http://xmlns.com/foaf/0.1/homepage&quot;,
      &quot;@type&quot;: &quot;@id&quot;
    }
  },
  &quot;name&quot;: &quot;Manu Sporny&quot;,
  &quot;homepage&quot;: &quot;http://manu.sporny.org/&quot;
}</pre></div>

<p>The compaction algorithm enables a developer to map any document into an
  application-specific compacted form by first <a href="#expanded-document-form" class="sec-ref"><span class="secno">4.14</span> <span class="sec-title">Expanded Document Form</span></a>.
  While the context provided above mapped <code>http://xmlns.com/foaf/0.1/name</code>
  to <strong>name</strong>, it could have also mapped it to any arbitrary string
  provided by the developer. This powerful mechanism, along with another
  JSON-LD API technique called <em>framing</em>, allows the developer to
  re-shape the incoming JSON data into a format that is optimized for
  their application.</p>
</section>

</section>

<section class="appendix normative" id="json-ld-grammar">

<!--OddPage-->
<h2><span class="secno">A. </span>JSON-LD Grammar</h2>
<em>This section is normative</em>

<p data-number="114" class="issue resolved">This section is an attempt to formalize
a normative grammar for JSON-LD.</p>

<p>This appendix restates the syntactic conventions described in the
  previous sections more formally.</p>

<p>A JSON-LD processor <em class="rfc2119" title="should">should</em> attempt to process non-conforming
  JSON-LD documents. Conformance violations <em class="rfc2119" title="must">must</em> be reported through a
  callback mechanism defined in [<cite><a class="bibref" href="#bib-JSON-LD-API">JSON-LD-API</a></cite>].</p>

<p>For a JSON-LD document to be conforming, it <em class="rfc2119" title="must">must</em> be a valid JSON document
  as described in [<cite><a class="bibref" href="#bib-RFC4627">RFC4627</a></cite>].</p>

<p>JSON-LD introduces a number of keywords of the form '<code>@</code>'
  followed by a set of one or more lower case alphabetic characters
  (<code>@[a-z]+</code>). JSON-LD documents <em class="rfc2119" title="should not">should not</em> define terms beginning
  with '<code>@</code>'.
  (See <a href="#syntax-tokens-and-keywords" class="sec-ref"><span class="secno">3.2</span> <span class="sec-title">Syntax Tokens and Keywords</span></a> for a complete definition of JSON-LD keywords).</p>

<div class="note"><div class="note-title"><span>Note</span></div><p class="">The JSON-LD context allows <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keywords</a> to be
  aliased within the <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a>. Whenever a <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a> is
  discussed, this is also understood to apply to an alias for that <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a>
  For example, if the <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a> defines the <a class="tref internalDFN" title="term" href="#dfn-term">term</a> <code>id</code> as
  an alias for <code>@id</code>, that alias may be legitimately used as a substitution
  for <code>@id</code>. Note that <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a> aliases are not expanded during
  context processing.</p></div>

<p>A JSON-LD document is either a
  a single <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a>
  or a JSON <a class="tref internalDFN" title="array" href="#dfn-array">array</a> containing a set of
  one or more <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definitions</a>.</p>
<div class="example"><div class="example-title"><span>Example 60</span>: Simple node definition</div><pre class="example">{
  &quot;name&quot;: &quot;Manu Sporny&quot;,
  &quot;homepage&quot;: &quot;http://manu.sporny.org/&quot;,
  &quot;depiction&quot;: &quot;http://twitter.com/account/profile_image/manusporny&quot;
}</pre></div>
<div class="example"><div class="example-title"><span>Example 61</span>: Array of node definitions</div><pre class="example">[
  {
    &quot;name&quot;: &quot;Manu Sporny&quot;,
    &quot;homepage&quot;: &quot;http://manu.sporny.org/&quot;,
    &quot;depiction&quot;: &quot;http://twitter.com/account/profile_image/manusporny&quot;
  }, {
    &quot;name&quot;: &quot;Gregg Kellogg&quot;,
    &quot;homepage&quot;: &quot;http://greggkellogg.net/&quot;,
    &quot;depiction&quot;: &quot;http://twitter.com/account/profile_image/gkellogg&quot;
  }
]</pre></div>

<section id="grammar-node-definition">
<h3><span class="secno">A.1 </span>Node Definition</h3>
<p>A <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a> is a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a>
  containing one or more key/value pairs. Keys are <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>s,
  <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></a>s,
  <a class="tref internalDFN" title="term" href="#dfn-term">term</a>s defined within the <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a>, or one of the
  following keywords:</p>
<ul>
  <li><code>@context</code>,</li>
  <li><code>@graph</code>,</li>
  <li><code>@id</code>, or</li>
  <li><code>@type</code></li>
</ul>
<p>If the <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a> contains the <code>@context</code>
  key, it's value <em class="rfc2119" title="must">must</em> be one of the following:</p>
<ul>
  <li>a <a class="tref internalDFN" title="string" href="#dfn-string">string</a> with the lexical form of <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>,</li>
  <li>a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> conforming the the syntax requirements stated
    in <a href="#grammar-context" class="sec-ref"><span class="secno">A.6</span> <span class="sec-title">Context Definition</span></a>, or</li>
  <li>an <a class="tref internalDFN" title="array" href="#dfn-array">array</a> composed of any number of the previous two expressions.</li>
</ul>
<div class="example"><div class="example-title"><span>Example 62</span>: Node definition with external context</div><pre class="example">{
  <span class="diff">&quot;@context&quot;: &quot;http://json-ld.org/contexts/person.jsonld&quot;</span>,
  &quot;name&quot;: &quot;Manu Sporny&quot;,
  &quot;homepage&quot;: &quot;http://manu.sporny.org/&quot;,
  &quot;depiction&quot;: &quot;http://twitter.com/account/profile_image/manusporny&quot;
}</pre></div>
<p>See <a href="#node-identifiers" class="sec-ref"><span class="secno">3.6</span> <span class="sec-title">Node Identifiers</span></a>, <a href="#compact-iris" class="sec-ref"><span class="secno">4.1</span> <span class="sec-title">Compact IRIs</span></a>,
  and <a href="#identifying-unlabeled-nodes" class="sec-ref"><span class="secno">4.12</span> <span class="sec-title">Identifying Unlabeled Nodes</span></a> for further discussion on
  <code>@id</code> values.</p>

<p>If the <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a> contains the <code>@id</code>
  key, it's value
  <em class="rfc2119" title="must">must</em> be a <a class="tref internalDFN" title="string" href="#dfn-string">string</a> having the lexical form of <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>,
  <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></a> (including <a class="tref internalDFN" title="unlabeled_node" href="#dfn-unlabeled_node">unlabeled node</a>), or a
  <a class="tref internalDFN" title="term" href="#dfn-term">term</a> defined in the <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a> expanding
  into an <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a> or an <a class="tref internalDFN" title="unlabeled_node" href="#dfn-unlabeled_node">unlabeled node</a>.</p>

<div class="example"><div class="example-title"><span>Example 63</span>: Node definition with @id</div><pre class="example">{
  &quot;@context&quot;: &quot;http://json-ld.org/contexts/person.jsonld&quot;,
  <span class="diff">&quot;@id&quot;: &quot;http://manu.sporny.org/i/public&quot;</span>,
  &quot;name&quot;: &quot;Manu Sporny&quot;,
  &quot;homepage&quot;: &quot;http://manu.sporny.org/&quot;,
  &quot;depiction&quot;: &quot;http://twitter.com/account/profile_image/manusporny&quot;
}</pre></div>

<p>If the <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a> contains the <code>@type</code>
  key, it's value
  <em class="rfc2119" title="must">must</em> be either a <a class="tref internalDFN" title="string" href="#dfn-string">string</a> having the lexical form of
  <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></a>, <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></a>, a <a class="tref internalDFN" title="term" href="#dfn-term">term</a> defined in the
  <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a> expanding into an <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></a>,
  or an <a class="tref internalDFN" title="array" href="#dfn-array">array</a> of any of these.</p>

<div class="note"><div class="note-title"><span>Note</span></div><p class="">A JSON-LD processor <em class="rfc2119" title="should">should</em> process non-conforming documents
  having <code>@type</code> values including <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a> or
  <a class="tref internalDFN" title="node_reference" href="#dfn-node_reference">node reference</a> entries but <em class="rfc2119" title="must">must</em>
  discard everything except for the value of the <code>@id</code> key.</p></div>

<div class="example"><div class="example-title"><span>Example 64</span>: Node definition with @type</div><pre class="example">{
  &quot;@context&quot;: &quot;http://json-ld.org/contexts/person.jsonld&quot;,
  &quot;@id&quot;: &quot;http://manu.sporny.org/i/public&quot;,
  <span class="diff">&quot;@type&quot;: &quot;Person&quot;</span>,
  &quot;name&quot;: &quot;Manu Sporny&quot;,
  &quot;homepage&quot;: &quot;http://manu.sporny.org/&quot;,
  &quot;depiction&quot;: &quot;http://twitter.com/account/profile_image/manusporny&quot;
}</pre></div>
<p>See <a href="#specifying-the-type" class="sec-ref"><span class="secno">3.7</span> <span class="sec-title">Specifying the Type</span></a> for further discussion on
  <code>@type</code> values.</p>

<p>If the <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a> contains the <code>@graph</code>
  key, it's value <em class="rfc2119" title="must">must</em>
  be a <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a> or an <a class="tref internalDFN" title="array" href="#dfn-array">array</a> of zero or more
  <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definitions</a>. If the
  <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a> contains an <code>@id</code> keyword,
  its value is used as the label of a named graph.</p>

<div class="note"><div class="note-title"><span>Note</span></div><p class="">As a special case, if the <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> contains no
  keys other than <code>@graph</code> and <code>@context</code>, and the
  <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> is the root of the JSON-LD document, the
  <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> is not treated as a <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a>; this
  is used as a way of defining <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node
  definitions</a> that may not form a connected graph. This allows a
  <a class="tref internalDFN" title="context" href="#dfn-context">context</a> to be defined which is shared by all of the constituent
  <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definitions</a>.</p></div>


<div class="example"><div class="example-title"><span>Example 65</span>: Multiple node definitions with a single context using @graph</div><pre class="example">{
  &quot;@context&quot;: ...,
  &quot;<span class="diff">@graph</span>&quot;:
  [
    {
      &quot;@id&quot;: &quot;http://manu.sporny.org/i/public&quot;,
      &quot;@type&quot;: &quot;foaf:Person&quot;,
      &quot;name&quot;: &quot;Manu Sporny&quot;,
      &quot;knows&quot;: &quot;http://greggkellogg.net/foaf#me&quot;
    },
    {
      &quot;@id&quot;: &quot;http://greggkellogg.net/foaf#me&quot;,
      &quot;@type&quot;: &quot;foaf:Person&quot;,
      &quot;name&quot;: &quot;Gregg Kellogg&quot;,
      &quot;knows&quot;: &quot;http://manu.sporny.org/i/public&quot;
    }
  ]
}</pre></div>

<p>See <a href="#named-graphs" class="sec-ref"><span class="secno">4.11</span> <span class="sec-title">Named Graphs</span></a> for further discussion on
  <code>@graph</code> values.</p>

<p>A JSON-LD document <em class="rfc2119" title="must not">must not</em> contain any other <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a> or
  alias expanding to any other keyword.</p>

<p>Other keys <em class="rfc2119" title="must">must</em> expand to an <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></a> using the
  <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a>. The values associated with these keys
  may be any of the following:</p>

<ul>
  <li><a class="tref internalDFN" title="string" href="#dfn-string">string</a>,</li>
  <li><a class="tref internalDFN" title="number" href="#dfn-number">number</a>,</li>
  <li><a class="tref internalDFN" title="true" href="#dfn-true">true</a>,</li>
  <li><a class="tref internalDFN" title="false" href="#dfn-false">false</a>,</li>
  <li><a class="tref internalDFN" title="null" href="#dfn-null">null</a>,</li>
  <li><a class="tref internalDFN" title="node_reference" href="#dfn-node_reference">node reference</a>,</li>
  <li><a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a>,</li>
  <li><a class="tref internalDFN" title="typed_value" href="#dfn-typed_value">typed value</a>,</li>
  <li><a class="tref internalDFN" title="language-tagged_string" href="#dfn-language-tagged_string">language-tagged string</a>,</li>
  <li><code>@set</code> or <code>@list</code>
    definition (see <a href="#sets-and-lists" class="sec-ref"><span class="secno">4.9</span> <span class="sec-title">Sets and Lists</span></a>),</li>
  <li>an <a class="tref internalDFN" title="array" href="#dfn-array">array</a> zero or more of these, or</li>
  <li><a class="tref internalDFN" title="language_map" href="#dfn-language_map">language map</a>.</li>
</ul>

</section>

<section id="grammar-node-reference">
<h3><span class="secno">A.2 </span>Node Reference</h3>
<p>A <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> containing only the <code>@id</code> (or alias)
  is a <a class="tref internalDFN" title="node_reference" href="#dfn-node_reference">node reference</a> and not a
  <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a>.
</p>
<div class="example"><div class="example-title"><span>Example 66</span>: Explicit node reference</div><pre class="example">{
  &quot;@context&quot;: ...,
  &quot;@graph&quot;: [
    {
      &quot;@id&quot;: &quot;http://example.org/library&quot;,
      &quot;@type&quot;: &quot;ex:Library&quot;,
      <span class="diff">&quot;ex:contains&quot;: {&quot;@id&quot;: &quot;http://example.org/library/the-republic&quot;}</span>
    }, {
      &quot;@id&quot;: &quot;http://example.org/library/the-republic&quot;,
      &quot;@type&quot;: &quot;ex:Book&quot;,
      &quot;dc:creator&quot;: &quot;Plato&quot;,
      &quot;dc:title&quot;: &quot;The Republic&quot;,
      <span class="diff">&quot;ex:contains&quot;: {&quot;@id&quot;: &quot;http://example.org/library/the-republic#introduction&quot;}</span>
    }, {
      &quot;@id&quot;: &quot;http://example.org/library/the-republic#introduction&quot;,
      &quot;@type&quot;: &quot;ex:Chapter&quot;,
      &quot;dc:description&quot;: &quot;An introductory chapter on The Republic.&quot;,
      &quot;dc:title&quot;: &quot;The Introduction&quot;
    }
  ]
}
}</pre></div>
</section>

<section id="grammar-language-map">
<h3><span class="secno">A.3 </span>Language Map</h3>
<p>A <a class="tref internalDFN" title="language_map" href="#dfn-language_map">language map</a> may be used as a term value within a
  <a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a> if the term is defined with
  <code>@container</code> set to <code>@language</code>.</p>
<p>The keys of a <a class="tref internalDFN" title="language_map" href="#dfn-language_map">language map</a> <em class="rfc2119" title="must">must</em> be a [<cite><a class="bibref" href="#bib-BCP47">BCP47</a></cite>] string
  with an associated value that is any of the following types:</p>
<ul>
  <li><a class="tref internalDFN" title="string" href="#dfn-string">string</a>,</li>
  <li><a class="tref internalDFN" title="number" href="#dfn-number">number</a>,</li>
  <li><a class="tref internalDFN" title="true" href="#dfn-true">true</a>,</li>
  <li><a class="tref internalDFN" title="false" href="#dfn-false">false</a>,</li>
  <li><a class="tref internalDFN" title="null" href="#dfn-null">null</a>,</li>
  <li><a class="tref internalDFN" title="node_reference" href="#dfn-node_reference">node reference</a>,</li>
  <li><a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a>,</li>
  <li><a class="tref internalDFN" title="typed_value" href="#dfn-typed_value">typed value</a>,</li>
  <li><a class="tref internalDFN" title="language-tagged_string" href="#dfn-language-tagged_string">language-tagged string</a>,</li>
  <li><code>@set</code> or <code>@list</code>
    definition (see <a href="#sets-and-lists" class="sec-ref"><span class="secno">4.9</span> <span class="sec-title">Sets and Lists</span></a>), or</li>
  <li>an <a class="tref internalDFN" title="array" href="#dfn-array">array</a> zero or more of these</li>
</ul>
<p data-number="133" class="issue resolved">We had also discussed values other than strings, such as those that might represent a more reified version of a value with other properties, such as is described using <a href="http://www.w3.org/TR/skos-reference/skos-xl.html">SKOS-XL</a>.</p>
<div class="example"><div class="example-title"><span>Example 67</span>: Language map expressing a property in three languages</div><pre class="example">{
  &quot;@context&quot;:
  {
    &quot;title&quot;:
    {
      &quot;@id&quot;: &quot;http://purl.org/dc/terms/title&quot;
      <span class="diff">&quot;@container&quot;: &quot;@language&quot;</span>
    }
  },
...
  &quot;title&quot;:
  <span class="diff">{
    &quot;en&quot;: &quot;JSON-LD Syntax&quot;,
    &quot;ru&quot;: &quot;JSON-LD Синтаксис&quot;,
    &quot;ja&quot;: &quot;JSON-LDの構文&quot;
  }</span>
...
}</pre></div>
</section>

<section id="grammar-expanded-values">
<h3><span class="secno">A.4 </span>Expanded Values</h3>
<p>An <dfn title="expanded_value" id="dfn-expanded_value">expanded value</dfn> is a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> containing the
  <code>@value</code> key, or an alias for the <code>@value</code> value key.
  It <em class="rfc2119" title="may">may</em>
  also contain the <code>@type</code> or <code>@language</code> keys, or their
  respective keyword aliases. An <a class="tref internalDFN" title="expanded_value" href="#dfn-expanded_value">expanded value</a> <em class="rfc2119" title="must not">must not</em>
  contain keys other than <code>@value</code>, <code>@language</code>, and
  <code>@type</code>.
  An <a class="tref internalDFN" title="expanded_value" href="#dfn-expanded_value">expanded value</a> <em class="rfc2119" title="must not">must not</em> contain both the
  <code>@language</code> and <code>@type</code> keys.</p>
  <p>The value of the <code>@value</code> key, or its alias, <em class="rfc2119" title="must">must</em> be either a
  <a class="tref internalDFN" title="string" href="#dfn-string">string</a>, <a class="tref internalDFN" title="number" href="#dfn-number">number</a>, <a class="tref internalDFN" title="true" href="#dfn-true">true</a>, or
  <a class="tref internalDFN" title="false" href="#dfn-false">false</a>.</p>
<p>If an <a class="tref internalDFN" title="expanded_value" href="#dfn-expanded_value">expanded value</a> contains a <code>@language</code> key,
  it <em class="rfc2119" title="must not">must not</em> contain any other key except <code>@value</code>. The value of
  the <code>@language</code> key <em class="rfc2119" title="must">must</em> have the lexical form described in
  [<cite><a class="bibref" href="#bib-BCP47">BCP47</a></cite>], or be <a class="tref internalDFN" title="null" href="#dfn-null">null</a>.</p>
<p>If an <a class="tref internalDFN" title="expanded_value" href="#dfn-expanded_value">expanded value</a> contains a <code>@type</code> key, it
  <em class="rfc2119" title="must not">must not</em> contain any other key except <code>@value</code>. The value of
  <code>@type</code> <em class="rfc2119" title="must">must</em> be a <a class="tref internalDFN" title="term" href="#dfn-term">term</a>, <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></a>,
  <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></a>, or <code>null</code>.</p>
<p>See <a href="#typed-values" class="sec-ref"><span class="secno">4.2</span> <span class="sec-title">Typed Values</span></a> and <a href="#language-tagged-strings" class="sec-ref"><span class="secno">4.3</span> <span class="sec-title">Language-tagged Strings</span></a>
  for a further discussion of
  <a class="tref internalDFN" title="expanded_value" href="#dfn-expanded_value">expanded values</a>.</p>
</section>

<section id="grammar-set-list">
<h3><span class="secno">A.5 </span>List and Set Values</h3>

<p>A <dfn title="list" id="dfn-list">list</dfn> is a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> having only the <code>@list</code>
  <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a>. Its value <em class="rfc2119" title="must">must</em> be an <a class="tref internalDFN" title="array" href="#dfn-array">array</a> of any of the following:</p>
<ul>
  <li><a class="tref internalDFN" title="string" href="#dfn-string">string</a>,</li>
  <li><a class="tref internalDFN" title="node_reference" href="#dfn-node_reference">node reference</a>,</li>
  <li><a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a>,</li>
  <li><a class="tref internalDFN" title="typed_value" href="#dfn-typed_value">typed value</a>, or</li>
  <li><a class="tref internalDFN" title="language-tagged_string" href="#dfn-language-tagged_string">language-tagged string</a>.</li>
</ul>
<p>A <dfn title="set" id="dfn-set">set</dfn> is a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> having only the <code>@set</code>
  <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a>. Its value <em class="rfc2119" title="must">must</em> be an <a class="tref internalDFN" title="array" href="#dfn-array">array</a> of any of the following:</p>
<ul>
  <li><a class="tref internalDFN" title="string" href="#dfn-string">string</a>,</li>
  <li><a class="tref internalDFN" title="node_reference" href="#dfn-node_reference">node reference</a>,</li>
  <li><a class="tref internalDFN" title="node_definition" href="#dfn-node_definition">node definition</a>,</li>
  <li><a class="tref internalDFN" title="typed_value" href="#dfn-typed_value">typed value</a>,</li>
  <li><a class="tref internalDFN" title="language-tagged_string" href="#dfn-language-tagged_string">language-tagged string</a>,</li>
  <li><code>@set</code> or <code>@list</code>
    definition (see <a href="#sets-and-lists" class="sec-ref"><span class="secno">4.9</span> <span class="sec-title">Sets and Lists</span></a>), or</li>
  <li>an <a class="tref internalDFN" title="array" href="#dfn-array">array</a> zero or more of these.</li>
</ul>
<p>See <a href="#sets-and-lists" class="sec-ref"><span class="secno">4.9</span> <span class="sec-title">Sets and Lists</span></a> for a further discussion of List and Set Values.</p>
</section>

<section id="grammar-context">
<h3><span class="secno">A.6 </span>Context Definition</h3>
<p>A <dfn title="context_definition" id="dfn-context_definition">context definition</dfn> is a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a>
  containing one or more key/value pairs. Keys are non-keyword <a class="tref internalDFN" title="string" href="#dfn-string">strings</a>
  or the <code>@language</code> or <code>@vocab</code> <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keywords</a>.
  A <a class="tref internalDFN" title="context_definition" href="#dfn-context_definition">context definition</a>
  <em class="rfc2119" title="should not">should not</em> contain any keys having the lexical form of <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a> other than
  <code>@language</code> or <code>@vocab</code>.</p>
<p>If the <a class="tref internalDFN" title="context_definition" href="#dfn-context_definition">context definition</a> has a <code>@language</code> key,
  the value <em class="rfc2119" title="must">must</em> have the lexical form described in [<cite><a class="bibref" href="#bib-BCP47">BCP47</a></cite>] or be <a class="tref internalDFN" title="null" href="#dfn-null">null</a>.</p>
<p>If the <a class="tref internalDFN" title="context_definition" href="#dfn-context_definition">context definition</a> has a <code>@vocab</code> key,
  the value <em class="rfc2119" title="must">must</em> have the lexical form of <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></a> or be <a class="tref internalDFN" title="null" href="#dfn-null">null</a>.</p>
<p>Other keys are <a class="tref internalDFN" title="term" href="#dfn-term">term</a> definitions. Their values <em class="rfc2119" title="must">must</em> be either a
  <a class="tref internalDFN" title="string" href="#dfn-string">string</a>, or a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> having the form of an <a class="tref internalDFN" title="expanded_term_definition" href="#dfn-expanded_term_definition">expanded term
  definition</a> (see <a href="#expanded-term-definition" class="sec-ref"><span class="secno">4.5</span> <span class="sec-title">Expanded Term Definition</span></a>).</p>
<p>An <dfn title="expanded_term_definition" id="dfn-expanded_term_definition">expanded term definition</dfn> is composed of zero or more keys from <code>@id</code>,
  <code>@type</code>, <code>@language</code> or <code>@container</code>. An
  <a class="tref internalDFN" title="expanded_term_definition" href="#dfn-expanded_term_definition">expanded term definition</a> <em class="rfc2119" title="must not">must not</em> contain any other keys.
  All values associated with <code>@id</code> <em class="rfc2119" title="must">must</em> expand to an <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></a>.</p>
<p>If the <a class="tref internalDFN" title="term" href="#dfn-term">term</a> definition is not a <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></a> or <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></a>,
  the <a class="tref internalDFN" title="expanded_term_definition" href="#dfn-expanded_term_definition">expanded term
  definition</a> <em class="rfc2119" title="must">must</em> include the <code>@id</code> key.</p>
<p>If the <a class="tref internalDFN" title="expanded_term_definition" href="#dfn-expanded_term_definition">expanded term definition</a> contains the <code>@id</code> <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a>,
  it <em class="rfc2119" title="must">must</em> be a <a class="tref internalDFN" title="string" href="#dfn-string">string</a> having the lexical form of <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>,
  <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></a>, a <a class="tref internalDFN" title="term" href="#dfn-term">term</a> defined in the defining <a class="tref internalDFN" title="context_definition" href="#dfn-context_definition">context
  definition</a> or the <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a>, or an <a class="tref internalDFN" title="array" href="#dfn-array">array</a> composed of any of the previous allowed values.</p>
<p>If the <a class="tref internalDFN" title="expanded_term_definition" href="#dfn-expanded_term_definition">expanded term definition</a> contains the <code>@type</code> <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a>,
  it <em class="rfc2119" title="must">must</em> be a <a class="tref internalDFN" title="string" href="#dfn-string">string</a> having the lexical form of <a class="tref internalDFN" title="absolute_iri" href="#dfn-absolute_iri">absolute <abbr title="Internationalized Resource Identifier">IRI</abbr></a>,
  <a class="tref internalDFN" title="compact_iri" href="#dfn-compact_iri">compact <abbr title="Internationalized Resource Identifier">IRI</abbr></a>, or a <a class="tref internalDFN" title="term" href="#dfn-term">term</a> defined in the defining <a class="tref internalDFN" title="context_definition" href="#dfn-context_definition">context
  definition</a> or the <a class="tref internalDFN" title="active_context" href="#dfn-active_context">active context</a>.</p>
<p>If the <a class="tref internalDFN" title="expanded_term_definition" href="#dfn-expanded_term_definition">expanded term definition</a> contains the <code>@language</code> <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a>,
  the value <em class="rfc2119" title="must">must</em> have the lexical form described in [<cite><a class="bibref" href="#bib-BCP47">BCP47</a></cite>] or be <a class="tref internalDFN" title="null" href="#dfn-null">null</a>.</p>
<p>If the <a class="tref internalDFN" title="expanded_term_definition" href="#dfn-expanded_term_definition">expanded term definition</a> contains the <code>@container</code> <a class="tref internalDFN" title="keyword" href="#dfn-keyword">keyword</a>,
  the value <em class="rfc2119" title="must">must</em> be either <code>@list</code>, <code>@set</code>, <code>@language</code>, or be <a class="tref internalDFN" title="null" href="#dfn-null">null</a>.
  If the value is <code>@language</code>, when the <a class="tref internalDFN" title="term" href="#dfn-term">term</a> is used outside of the <code>@context</code>, the
  associated value <em class="rfc2119" title="must">must</em> be a <a class="tref internalDFN" title="json_object" href="#dfn-json_object">JSON object</a> whose keys are <a class="tref internalDFN" title="string" href="#dfn-string">string</a>s that are [<cite><a class="bibref" href="#bib-BCP47">BCP47</a></cite>] language identifiers.
  The values associated with each [<cite><a class="bibref" href="#bib-BCP47">BCP47</a></cite>] language string <em class="rfc2119" title="must">must</em> be a <a class="tref internalDFN" title="string" href="#dfn-string">string</a> or an <a class="tref internalDFN" title="array" href="#dfn-array">array</a> of <a class="tref internalDFN" title="string" href="#dfn-string">string</a>s.</p>
<p>See <a href="#the-context" class="sec-ref"><span class="secno">3.3</span> <span class="sec-title">The Context</span></a> and <a href="#expanded-term-definition" class="sec-ref"><span class="secno">4.5</span> <span class="sec-title">Expanded Term Definition</span></a>
  for a further discussion of contexts.</p>
</section>
<div class="example"><div class="example-title"><span>Example 68</span>: Context definition with simple terms, expanded term definitions and @language</div><pre class="example">{
  &quot;@language&quot;: &quot;en&quot;,
  &quot;xsd&quot;: &quot;http://www.w3.org/2001/XMLSchema#&quot;,
  &quot;foaf&quot;: &quot;http://xmlns.com/foaf/0.1/&quot;,
  &quot;name&quot;: &quot;foaf:name&quot;,
  &quot;depiction&quot;: {&quot;@id&quot;: &quot;foaf:depiction&quot;, &quot;@type&quot;: &quot;@id&quot;},
  &quot;modified&quot;: {&quot;@id&quot;: &quot;http://purl.org/dc/terms/modified&quot;, &quot;@type&quot;: &quot;xsd:dateTime&quot;},
  &quot;homepage&quot;: {&quot;@id&quot;: &quot;foaf:homepage&quot;, &quot;@type&quot;: &quot;@id&quot;, &quot;@container&quot;: &quot;@list&quot;}
}</pre></div>
</section>

<section class="appendix informative" id="relationship-to-other-linked-data-formats-and-data-models">

<!--OddPage-->
<h2><span class="secno">B. </span>Relationship to Other Linked Data Formats and Data Models</h2><p><em>This section is non-normative.</em></p>

<div class="issue"><div class="issue-title"><span>Issue</span></div><p class="">
The intent of the Working Group and the Editors of this specification is to
eventually align terminology used in this document with the terminology used
in the RDF Concepts document [<cite><a class="bibref" href="#bib-RDF-CONCEPTS">RDF-CONCEPTS</a></cite>] to the extent to which it makes sense to do so.
In general, if there is an analogue to terminology used in this document in
the RDF Concepts document, the preference is to use the terminology in the
RDF Concepts document.
</p></div>

<p>JSON-LD is a specification for representing <a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">Linked Data</a> in JSON. A common
  way of working with Linked Data is through <dfn title="rdf" id="dfn-rdf">RDF</dfn>, the Resource Description Framework.
  RDF can be expressed using JSON-LD by associating JSON-LD concepts such as <code>@id</code>
  and <code>@type</code> with the equivalent <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>s in RDF. Further information about
  RDF may be found in the [<cite><a class="bibref" href="#bib-RDF-PRIMER">RDF-PRIMER</a></cite>].</p>

<p>The JSON-LD markup examples below demonstrate how JSON-LD can be used to
  express semantic data marked up in other languages and data models
  such as RDF, Turtle, RDFa, Microformats,
  and Microdata. These sections are merely provided as evidence that JSON-LD is
  very flexible in what it can express across different <a class="tref internalDFN" title="linked_data" href="#dfn-linked_data">Linked Data</a> approaches.
  Further information on transforming JSON-LD into RDF are detailed in the
  [<cite><a class="bibref" href="#bib-JSON-LD-API">JSON-LD-API</a></cite>].</p>

<section id="rdf">
  <h3><span class="secno">B.1 </span>RDF</h3><p><em>This section is non-normative.</em></p>

  <p>The RDF data model, as outlined in [<cite><a class="bibref" href="#bib-RDF-CONCEPTS">RDF-CONCEPTS</a></cite>], is an abstract
  syntax for representing a directed graph of information. JSON-LD is
  capable of serializing any RDF graph, and performing full RDF to
  JSON-LD to RDF round-tripping. A complete description of how JSON-LD maps
  to RDF and algorithms detailing how one can convert from RDF to
  JSON-LD and from JSON-LD to RDF are included in the JSON-LD API
  [<cite><a class="bibref" href="#bib-JSON-LD-API">JSON-LD-API</a></cite>] specification.
  </p>

</section>

<section id="turtle">
  <h3><span class="secno">B.2 </span>Turtle</h3>

  <p>The following are examples of converting <a class="tref internalDFN" title="rdf" href="#dfn-rdf">RDF</a>
  expressed in [<cite><a class="bibref" href="#bib-TURTLE-TR">TURTLE-TR</a></cite>] into JSON-LD.</p>

<section id="prefix-definitions">
<h4><span class="secno">B.2.1 </span>Prefix definitions</h4><p><em>This section is non-normative.</em></p>
<p>The JSON-LD context has direct equivalents for the Turtle
  <code>@prefix</code> declaration:</p>

<div class="example"><div class="example-title"><span>Example 69</span></div><pre class="example">@prefix foaf: &lt;http://xmlns.com/foaf/0.1/&gt; .

&lt;http://manu.sporny.org/i/public&gt; a foaf:Person;
  foaf:name &quot;Manu Sporny&quot;;
  foaf:homepage &lt;http://manu.sporny.org/&gt; .</pre></div>

<div class="example"><div class="example-title"><span>Example 70</span></div><pre class="example">{
  &quot;@context&quot;:
  {
    &quot;foaf&quot;: &quot;http://xmlns.com/foaf/0.1/&quot;
  },
  &quot;@id&quot;: &quot;http://manu.sporny.org/i/public&quot;,
  &quot;@type&quot;: &quot;foaf:Person&quot;,
  &quot;foaf:name&quot;: &quot;Manu Sporny&quot;,
  &quot;foaf:homepage&quot;: { &quot;@id&quot;: &quot;http://manu.sporny.org/&quot; }
}</pre></div>

<div class="note"><div class="note-title"><span>Note</span></div><p class="">JSON-LD has no equivalent for the Turtle <code>@base</code> declaration.</p></div>

</section>

<section id="embedding-1">
<h4><span class="secno">B.2.2 </span>Embedding</h4>
<p>Both Turtle and JSON-LD allow embedding, although Turtle only allows embedding of
  <a class="tref internalDFN" title="unlabeled_node" href="#dfn-unlabeled_node">unlabeled nodes</a>.</p>
</section>

<div class="example"><div class="example-title"><span>Example 71</span></div><pre class="example">@prefix foaf: &lt;http://xmlns.com/foaf/0.1/&gt; .

&lt;http://manu.sporny.org/i/public&gt;
  a foaf:Person;
  foaf:name &quot;Manu Sporny&quot;;
  foaf:knows [ a foaf:Person; foaf:name &quot;Gregg Kellogg&quot; ] .</pre></div>

<div class="example"><div class="example-title"><span>Example 72</span></div><pre class="example">{
  &quot;@context&quot;:
  {
    &quot;foaf&quot;: &quot;http://xmlns.com/foaf/0.1/&quot;
  },
  &quot;@id&quot;: &quot;http://manu.sporny.org/i/public&quot;,
  &quot;@type&quot;: &quot;foaf:Person&quot;,
  &quot;foaf:name&quot;: &quot;Manu Sporny&quot;,
  &quot;foaf:knows&quot;:
  {
    &quot;@type&quot;: &quot;foaf:Person&quot;,
    &quot;foaf:name&quot;: &quot;Gregg Kellogg&quot;
  }
}</pre></div>
<section id="lists">
<h4><span class="secno">B.2.3 </span>Lists</h4>
<p>Both JSON-LD and Turtle can represent sequential lists of values.</p>

<div class="example"><div class="example-title"><span>Example 73</span></div><pre class="example">@prefix foaf: &lt;http://xmlns.com/foaf/0.1/&gt; .

&lt;http://example.org/people#joebob&gt; a foaf:Person;
  foaf:name &quot;Joe Bob&quot;;
  foaf:nick ( &quot;joe&quot; &quot;bob&quot; &quot;jaybee&quot; ) .</pre></div>

<div class="example"><div class="example-title"><span>Example 74</span></div><pre class="example">{
  &quot;@context&quot;:
  {
    &quot;foaf&quot;: &quot;http://xmlns.com/foaf/0.1/&quot;
  },
  &quot;@id&quot;: &quot;http://example.org/people#joebob&quot;,
  &quot;@type&quot;: &quot;foaf:Person&quot;,
  &quot;foaf:name&quot;: &quot;Joe Bob&quot;,
  &quot;foaf:nick&quot;:
  {
    &quot;@list&quot;: [ &quot;joe&quot;, &quot;bob&quot;, &quot;jaybee&quot; ]
  }
}</pre></div>
</section>

</section>

<section id="rdfa">
<h3><span class="secno">B.3 </span>RDFa</h3>

<p>The following example describes three people with their respective names and
homepages.</p>

<div class="example"><div class="example-title"><span>Example 75</span></div><pre class="example">&lt;div <span class="diff">prefix=&quot;foaf: http://xmlns.com/foaf/0.1/&quot;</span>&gt;
   &lt;ul&gt;
      &lt;li <span class="diff">typeof=&quot;foaf:Person&quot;</span>&gt;
        &lt;a <span class="diff">rel=&quot;foaf:homepage&quot; href=&quot;http://example.com/bob/&quot; property=&quot;foaf:name&quot; </span>&gt;Bob&lt;/a&gt;
      &lt;/li&gt;
      &lt;li <span class="diff">typeof=&quot;foaf:Person&quot;</span>&gt;
        &lt;a <span class="diff">rel=&quot;foaf:homepage&quot; href=&quot;http://example.com/eve/&quot; property=&quot;foaf:name&quot; </span>&gt;Eve&lt;/a&gt;
      &lt;/li&gt;
      &lt;li <span class="diff">typeof=&quot;foaf:Person&quot;</span>&gt;
        &lt;a <span class="diff">rel=&quot;foaf:homepage&quot; href=&quot;http://example.com/manu/&quot; property=&quot;foaf:name&quot; </span>&gt;Manu&lt;/a&gt;
      &lt;/li&gt;
   &lt;/ul&gt;
&lt;/div&gt;</pre></div>

<p>An example JSON-LD implementation using a single <a class="tref internalDFN" title="context" href="#dfn-context">context</a> is
described below.</p>

<div class="example"><div class="example-title"><span>Example 76</span></div><pre class="example">{
  &quot;@context&quot;:
  {
    &quot;foaf&quot;: &quot;http://xmlns.com/foaf/0.1/&quot;
  },
  &quot;@graph&quot;:
  [
    {
      &quot;@type&quot;: &quot;foaf:Person&quot;,
      &quot;foaf:homepage&quot;: &quot;http://example.com/bob/&quot;,
      &quot;foaf:name&quot;: &quot;Bob&quot;
    },
    {
      &quot;@type&quot;: &quot;foaf:Person&quot;,
      &quot;foaf:homepage&quot;: &quot;http://example.com/eve/&quot;,
      &quot;foaf:name&quot;: &quot;Eve&quot;
    },
    {
      &quot;@type&quot;: &quot;foaf:Person&quot;,
      &quot;foaf:homepage&quot;: &quot;http://example.com/manu/&quot;,
      &quot;foaf:name&quot;: &quot;Manu&quot;
    }
  ]
}</pre></div>

</section>

<section id="microformats">
<h3><span class="secno">B.4 </span>Microformats</h3>

<p>The following example uses a simple Microformats hCard example to express
how the Microformat is represented in JSON-LD.</p>

<div class="example"><div class="example-title"><span>Example 77</span></div><pre class="example">&lt;div class=&quot;vcard&quot;&gt;
 &lt;a class=&quot;url fn&quot; href=&quot;http://tantek.com/&quot;&gt;Tantek Çelik&lt;/a&gt;
&lt;/div&gt;</pre></div>

<p>The representation of the hCard expresses the Microformat terms in the
<a class="tref internalDFN" title="context" href="#dfn-context">context</a> and uses them directly for the <code>url</code> and <code>fn</code>
properties. Also note that the Microformat to JSON-LD processor has
generated the proper URL type for <code>http://tantek.com/</code>.</p>

<div class="example"><div class="example-title"><span>Example 78</span></div><pre class="example">{
  &quot;@context&quot;:
  {
    &quot;vcard&quot;: &quot;http://microformats.org/profile/hcard#vcard&quot;,
    &quot;url&quot;:
    {
      &quot;@id&quot;: &quot;http://microformats.org/profile/hcard#url&quot;,
      &quot;@type&quot;: &quot;@id&quot;
    },
    &quot;fn&quot;: &quot;http://microformats.org/profile/hcard#fn&quot;
  },
  &quot;@type&quot;: &quot;vcard&quot;,
  &quot;url&quot;: &quot;http://tantek.com/&quot;,
  &quot;fn&quot;: &quot;Tantek Çelik&quot;
}</pre></div>

</section>

<section id="microdata">
<h3><span class="secno">B.5 </span>Microdata</h3>

<p>The microdata example below expresses book information as a microdata Work
item.
</p>

<div class="example"><div class="example-title"><span>Example 79</span></div><pre class="example">&lt;dl itemscope
    itemtype=&quot;http://purl.org/vocab/frbr/core#Work&quot;
    itemid=&quot;http://purl.oreilly.com/works/45U8QJGZSQKDH8N&quot;&gt;
 &lt;dt&gt;Title&lt;/dt&gt;
 &lt;dd&gt;&lt;cite itemprop=&quot;http://purl.org/dc/terms/title&quot;&gt;Just a Geek&lt;/cite&gt;&lt;/dd&gt;
 &lt;dt&gt;By&lt;/dt&gt;
 &lt;dd&gt;&lt;span itemprop=&quot;http://purl.org/dc/terms/creator&quot;&gt;Wil Wheaton&lt;/span&gt;&lt;/dd&gt;
 &lt;dt&gt;Format&lt;/dt&gt;
 &lt;dd itemprop=&quot;http://purl.org/vocab/frbr/core#realization&quot;
     itemscope
     itemtype=&quot;http://purl.org/vocab/frbr/core#Expression&quot;
     itemid=&quot;http://purl.oreilly.com/products/9780596007683.BOOK&quot;&gt;
  &lt;link itemprop=&quot;http://purl.org/dc/terms/type&quot; href=&quot;http://purl.oreilly.com/product-types/BOOK&quot;&gt;
  Print
 &lt;/dd&gt;
 &lt;dd itemprop=&quot;http://purl.org/vocab/frbr/core#realization&quot;
     itemscope
     itemtype=&quot;http://purl.org/vocab/frbr/core#Expression&quot;
     itemid=&quot;http://purl.oreilly.com/products/9780596802189.EBOOK&quot;&gt;
  &lt;link itemprop=&quot;http://purl.org/dc/terms/type&quot; href=&quot;http://purl.oreilly.com/product-types/EBOOK&quot;&gt;
  Ebook
 &lt;/dd&gt;
&lt;/dl&gt;</pre></div>

<p>Note that the JSON-LD representation of the Microdata information stays
true to the desires of the Microdata community to avoid contexts and
instead refer to items by their full <a class="tref internalDFN" title="iri" href="#dfn-iri"><abbr title="Internationalized Resource Identifier">IRI</abbr></a>.</p>

<div class="example"><div class="example-title"><span>Example 80</span></div><pre class="example">[
  {
    &quot;@id&quot;: &quot;http://purl.oreilly.com/works/45U8QJGZSQKDH8N&quot;,
    &quot;@type&quot;: &quot;http://purl.org/vocab/frbr/core#Work&quot;,
    &quot;http://purl.org/dc/terms/title&quot;: &quot;Just a Geek&quot;,
    &quot;http://purl.org/dc/terms/creator&quot;: &quot;Whil Wheaton&quot;,
    &quot;http://purl.org/vocab/frbr/core#realization&quot;:
    [
      &quot;http://purl.oreilly.com/products/9780596007683.BOOK&quot;,
      &quot;http://purl.oreilly.com/products/9780596802189.EBOOK&quot;
    ]
  },
  {
    &quot;@id&quot;: &quot;http://purl.oreilly.com/products/9780596007683.BOOK&quot;,
    &quot;@type&quot;: &quot;http://purl.org/vocab/frbr/core#Expression&quot;,
    &quot;http://purl.org/dc/terms/type&quot;: &quot;http://purl.oreilly.com/product-types/BOOK&quot;
  },
  {
    &quot;@id&quot;: &quot;http://purl.oreilly.com/products/9780596802189.EBOOK&quot;,
    &quot;@type&quot;: &quot;http://purl.org/vocab/frbr/core#Expression&quot;,
    &quot;http://purl.org/dc/terms/type&quot;: &quot;http://purl.oreilly.com/product-types/EBOOK&quot;
  }
]</pre></div>
</section>
</section>

<section class="appendix informative" id="iana-considerations">

<!--OddPage-->
<h2><span class="secno">C. </span>IANA Considerations</h2><p><em>This section is non-normative.</em></p>

<p>This section is included merely for standards community review and will be
submitted to the Internet Engineering Steering Group if this specification
becomes a <abbr title="World Wide Web Consortium">W3C</abbr> Recommendation.</p>

<h2 id="application-ld-json">application/ld+json</h2>
<dl>
  <dt>Type name:</dt>
  <dd>application</dd>
  <dt>Subtype name:</dt>
  <dd>ld+json</dd>
  <dt>Required parameters:</dt>
  <dd>None</dd>
  <dt>Optional parameters:</dt>
  <dd>
    <dl>
      <dt><code>form</code></dt>
      <dd>Determines the serialization form for the JSON-LD document. The only
        valid value at the moment is <code>expanded</code>. If no form is
        specified in an HTTP request header to an HTTP server, the server <em class="rfc2119" title="may">may</em>
        choose any form. If no form is specified in an HTTP response, the form
        <em class="rfc2119" title="must not">must not</em> be assumed to take any particular form.</dd>
    </dl>
  </dd>
  <dt>Encoding considerations:</dt>
  <dd>The same as the <code>application/json</code> MIME media type.</dd>
  <dt>Security considerations:</dt>
  <dd>Since JSON-LD is intended to be a pure data exchange format for
    directed graphs, the serialization <em class="rfc2119" title="should not">should not</em> be passed through a
    code execution mechanism such as JavaScript's <code>eval()</code>
    function. It is <em class="rfc2119" title="recommended">recommended</em> that a conforming parser does not attempt to
    directly evaluate the JSON-LD serialization and instead purely parse the
    input into a language-native data structure. </dd>
  <dt>Interoperability considerations:</dt>
  <dd>Not Applicable</dd>
  <dt>Published specification:</dt>
  <dd>The <a href="http://json-ld.org/spec/latest/">JSON-LD</a> specification.</dd>
  <dt>Applications that use this media type:</dt>
  <dd>Any programming environment that requires the exchange of
    directed graphs. Implementations of JSON-LD have been created for
    JavaScript, Python, Ruby, PHP and C++.
  </dd>
  <dt>Additional information:</dt>
  <dd>
    <dl>
      <dt>Magic number(s):</dt>
      <dd>Not Applicable</dd>
      <dt>File extension(s):</dt>
      <dd>.jsonld</dd>
      <dt>Macintosh file type code(s):</dt>
      <dd>TEXT</dd>
    </dl>
  </dd>
  <dt>Person &amp; email address to contact for further information:</dt>
  <dd>Manu Sporny &lt;msporny@digitalbazaar.com&gt;</dd>
  <dt>Intended usage:</dt>
  <dd>Common</dd>
  <dt>Restrictions on usage:</dt>
  <dd>None</dd>
  <dt>Author(s):</dt>
  <dd>Manu Sporny, Gregg Kellogg, Markus Lanthaler, Dave Longley</dd>
  <dt>Change controller:</dt>
  <dd><abbr title="World Wide Web Consortium">W3C</abbr></dd>
</dl>

<p>Fragment identifiers used with <a href="#application-ld-json">application/ld+json</a>
  resources <em class="rfc2119" title="may">may</em> identify a node in the <a class="tref internalDFN" title="linked_data_graph" href="#dfn-linked_data_graph">linked data graph</a> expressed in
  the resource. This idiom, which is also used in RDF [<cite><a class="bibref" href="#bib-RDF-CONCEPTS">RDF-CONCEPTS</a></cite>], gives a
  simple way to &quot;mint&quot; new, document-local IRIs to label nodes and therefore contributes
  considerably to the expressive power of JSON-LD.</p>

</section>

<section class="appendix informative" id="acknowledgements">

<!--OddPage-->
<h2><span class="secno">D. </span>Acknowledgements</h2><p><em>This section is non-normative.</em></p>

<p>A large amount of thanks goes out to the JSON-LD Community Group
participants who worked through many of the technical issues on the mailing
list and the weekly telecons - of special mention are Niklas Lindström,
François Daoust, and Zdenko 'Denny' Vrandečić.
The editors would like to thank Mark Birbeck, who provided a great deal of
the initial push behind the JSON-LD work via his work on RDFj.
The work of Dave Lehn and Mike Johnson are appreciated for reviewing,
and performing several implementations of the specification. Ian Davis is
thanked for this work on RDF/JSON. Thanks also to Nathan Rixham,
Bradley P. Allen,
Kingsley Idehen, Glenn McDonald, Alexandre Passant, Danny Ayers, Ted
Thibodeau Jr., Olivier Grisel, Josh Mandel, Eric Prud'hommeaux,
David Wood, Guus Schreiber, Pat Hayes, Sandro Hawke, and Richard
Cyganiak for their input on the specification.
</p>
</section>



<section id="references" class="appendix">
<!--OddPage-->
<h2><span class="secno">E. </span>References</h2><section id="normative-references"><h3><span class="secno">E.1 </span>Normative references</h3><dl class="bibliography"><dt id="bib-BCP47">[BCP47]</dt><dd>A. Phillips; M. Davis. <a href="http://tools.ietf.org/html/bcp47"><cite>Tags for Identifying Languages</cite></a> September 2009. IETF Best Current Practice. URL: <a href="http://tools.ietf.org/html/bcp47">http://tools.ietf.org/html/bcp47</a>
</dd><dt id="bib-RDF-CONCEPTS">[RDF-CONCEPTS]</dt><dd><cite><a href="http://www.w3.org/TR/2011/WD-rdf11-concepts-20110830/">RDF 1.1 Concepts and Abstract Syntax</a></cite> Richard Cyganiak, David Wood, Editors. World Wide Web Consortium (work in progress). 30 May 2012. Editor's Draft. This edition of the JSON-LD Syntax specification is http://www.w3.org/TR/2011/WD-rdf11-concepts-20110830/. The <a href="http://www.w3.org/TR/rdf11-concepts/">latest edition of the JSON-LD Syntax</a> is available at http://www.w3.org/TR/rdf11-concepts/
</dd><dt id="bib-RFC3987">[RFC3987]</dt><dd>M. Dürst; M. Suignard. <a href="http://www.ietf.org/rfc/rfc3987.txt"><cite>Internationalized Resource Identifiers (IRIs).</cite></a> January 2005. Internet RFC 3987. URL: <a href="http://www.ietf.org/rfc/rfc3987.txt">http://www.ietf.org/rfc/rfc3987.txt</a>
</dd><dt id="bib-RFC4627">[RFC4627]</dt><dd>D. Crockford. <a href="http://www.ietf.org/rfc/rfc4627.txt"><cite>The application/json Media Type for JavaScript Object Notation (JSON)</cite></a> July 2006. Internet RFC 4627. URL: <a href="http://www.ietf.org/rfc/rfc4627.txt">http://www.ietf.org/rfc/rfc4627.txt</a>
</dd><dt id="bib-RFC5988">[RFC5988]</dt><dd><cite><a href="http://tools.ietf.org/rfc/rfc5988">Web Linking</a></cite> M. Nottingham. Editor. October 2010. IETF Standard. URL: <a href="http://tools.ietf.org/rfc/rfc5988.txt">http://tools.ietf.org/rfc/rfc5988.txt</a>
</dd></dl></section><section id="informative-references"><h3><span class="secno">E.2 </span>Informative references</h3><dl class="bibliography"><dt id="bib-JSON-LD-API">[JSON-LD-API]</dt><dd><cite><a href="http://json-ld.org/spec/ED/json-ld-api/20120524/">The JSON-LD API 1.0</a></cite> Manu Sporny, Gregg Kellogg, Dave Longley, Markus Lanthaler, Editors. World Wide Web Consortium (work in progress). 24 May 2012. Editor's Draft. This edition of the JSON-LD Syntax specification is http://json-ld.org/spec/ED/json-ld-api/20120524/. The <a href="http://json-ld.org/spec/latest/json-ld-api/">latest edition of the JSON-LD Syntax</a> is available at http://json-ld.org/spec/latest/json-ld-api/
</dd><dt id="bib-RDF-PRIMER">[RDF-PRIMER]</dt><dd>Frank Manola; Eric Miller. <a href="http://www.w3.org/TR/2004/REC-rdf-primer-20040210/"><cite>RDF Primer.</cite></a> 10 February 2004. W3C Recommendation. URL: <a href="http://www.w3.org/TR/2004/REC-rdf-primer-20040210/">http://www.w3.org/TR/2004/REC-rdf-primer-20040210/</a>
</dd><dt id="bib-RDF-SPARQL-QUERY">[RDF-SPARQL-QUERY]</dt><dd>Andy Seaborne; Eric Prud'hommeaux. <a href="http://www.w3.org/TR/2008/REC-rdf-sparql-query-20080115"><cite>SPARQL Query Language for RDF.</cite></a> 15 January 2008. W3C Recommendation. URL: <a href="http://www.w3.org/TR/2008/REC-rdf-sparql-query-20080115">http://www.w3.org/TR/2008/REC-rdf-sparql-query-20080115</a>
</dd><dt id="bib-RDFA-CORE">[RDFA-CORE]</dt><dd>Shane McCarron; et al. <a href="http://www.w3.org/TR/2012/REC-rdfa-core-20120607/"><cite>RDFa Core 1.1: Syntax and processing rules for embedding RDF through attributes.</cite></a> 7 June 2012. W3C Recommendation. URL: <a href="http://www.w3.org/TR/2012/REC-rdfa-core-20120607/">http://www.w3.org/TR/2012/REC-rdfa-core-20120607/</a>
</dd><dt id="bib-TURTLE-TR">[TURTLE-TR]</dt><dd>Eric Prud'hommeaux, Gavin Carothers. <cite><a href="http://www.w3.org/TR/2011/WD-turtle-20110809/">Turtle: Terse RDF Triple Language.</a></cite> 09 August 2011. W3C Working Draft. URL: <a href="http://www.w3.org/TR/2011/WD-turtle-20110809/">http://www.w3.org/TR/2011/WD-turtle-20110809/</a>
</dd></dl></section></section></body></html>
